Make package编译Tweak插件,编译可以通过,但是打包报错

make package编译打包Tweak插件IconRenamer,编译可以通过,但是打包报错
编译打印如下:

Good:/var/mobile/Projects/IconRenamer root# make package
Making all for tweak IconRenamer…
Compiling IconRenamer.m…
Linking tweak IconRenamer…
Stripping IconRenamer…
Signing IconRenamer…
Making stage for tweak IconRenamer…
du: invalid option – ‘I’
Try `du --help’ for more information.
make: *** [internal-package] Error 2
Good:/var/mobile/Projects/IconRenamer root#

谢谢大神

你是直接编译的rpetrich的源码吗?
看起来是导致的,你也可以试试

make package messages=yes

,打印出更详细的出错信息

详细打印如下
Good:/var/mobile/Projects/IconRenamer root# make package messages=yes
Making all for tweak IconRenamer…
make -f Makefile --no-print-directory --no-keep-going
internal-library-compile
THEOS_CURRENT_TYPE=tweak THEOS_CURRENT_INSTANCE=IconRenamer THEOS_CURRENT_OPERATION=compile
THEOS_BUILD_DIR="." THEOS_MAKE_PARALLEL=yes
make[2]: Nothing to be done for internal-library-compile'. rm -rf "/private/var/mobile/Projects/IconRenamer/_" /var/theos/bin/fakeroot.sh -p "/private/var/mobile/Projects/IconRenamer/.theos/fakeroot" -c mkdir -p "/private/var/mobile/Projects/IconRenamer/_" -d layout ] && rsync -a "layout/" "/private/var/mobile/Projects/IconRenamer/_" --exclude "DEBIAN" --exclude "_MTN" --exclude ".git" --exclude ".svn" --exclude ".DS_Store" --exclude "._*" || true Making stage for tweak IconRenamer... mkdir -p "/private/var/mobile/Projects/IconRenamer/_/Library/MobileSubstrate/DynamicLibraries/" cp ./obj/IconRenamer.dylib "/private/var/mobile/Projects/IconRenamer/_/Library/MobileSubstrate/DynamicLibraries/" if -f IconRenamer.plist ]; then cp IconRenamer.plist "/private/var/mobile/Projects/IconRenamer/_/Library/MobileSubstrate/DynamicLibraries/"; fi du: invalid option -- 'I' Try du --help’ for more information.
mkdir -p "/private/var/mobile/Projects/IconRenamer/
/DEBIAN"
rsync -a “/private/var/mobile/Projects/IconRenamer/layout/DEBIAN/” "/private/var/mobile/Projects/IconRenamer/
/DEBIAN" --exclude “MTN" --exclude “.git” --exclude “.svn” --exclude “.DS_Store” --exclude ".*”
sed -e ‘/^[Vv]ersion:/d’ “/private/var/mobile/Projects/IconRenamer/layout/DEBIAN/control” > "/private/var/mobile/Projects/IconRenamer/
/DEBIAN/control"
echo “Version: 1.2-5” >> “/private/var/mobile/Projects/IconRenamer//DEBIAN/control"
echo "Installed-Size: " >> "/private/var/mobile/Projects/IconRenamer/
/DEBIAN/control”
COPYFILE_DISABLE=1 /var/theos/bin/fakeroot.sh -p “/private/var/mobile/Projects/IconRenamer/.theos/fakeroot” -r dpkg-deb -b “/private/var/mobile/Projects/IconRenamer/_” “./com.rpetrich.iconrenamer_1.2-5_iphoneos-arm.deb”
dpkg-deb: parse error, in file /private/var/mobile/Projects/IconRenamer/_/DEBIAN/control' near line 15 package com.rpetrich.iconrenamer’:
EOF before value of field `Installed-Size’ (missing final newline)
make: *** [internal-package] Error 2

rpetrich的工程用用他自己fork的Theos编译的,跟DHowett的原版可能不兼容。你改用rpetrich的Theos试试;
我更建议新建一个工程,参考他的核心代码,重新实现IconRenamer,这样有助于锻炼你的能力

http://bbs.feng.com/read-htm-tid-5259660.html
用的这里提供的方法,在ipad上编译出现的这个报错,同样的方式,在ipa3上编译是好的,但是在mini上始终是报错,还有就是我在mini上也装了DHowett的theos,并且编译其DHowett自带的插件模板,也是同样的报错

那你在2个机子上分别运行

du --help

看看输出什么

pad3不在身边,现在只有mini的打印
Good:/var/mobile/Projects/IconRenamer root# du --help
Usage: du [OPTION]… [FILE]…
or: du [OPTION]… --files0-from=F
Summarize disk usage of each FILE, recursively for directories.

Mandatory arguments to long options are mandatory for short options too.
-a, --all write counts for all files, not just directories
–apparent-size print apparent sizes, rather than disk usage; although
the apparent size is usually smaller, it may be
larger due to holes in (sparse') files, internal fragmentation, indirect blocks, and the like -B, --block-size=SIZE scale sizes by SIZE before printing them. E.g., -BM’ prints sizes in units of 1,048,576 bytes.
See SIZE format below.
-b, --bytes equivalent to --apparent-size --block-size=1' -c, --total produce a grand total -D, --dereference-args dereference only symlinks that are listed on the command line --files0-from=F summarize disk usage of the NUL-terminated file names specified in file F; If F is - then read names from standard input -H equivalent to --dereference-args (-D) -h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G) --si like -h, but use powers of 1000 not 1024 -k like --block-size=1K -l, --count-links count sizes many times if hard linked -m like --block-size=1M -L, --dereference dereference all symbolic links -P, --no-dereference don't follow any symbolic links (this is the default) -0, --null end each output line with 0 byte rather than newline -S, --separate-dirs do not include size of subdirectories -s, --summarize display only a total for each argument -x, --one-file-system skip directories on different file systems -X, --exclude-from=FILE exclude files that match any pattern in FILE --exclude=PATTERN exclude files that match PATTERN -d, --max-depth=N print the total for a directory (or file, with --all) only if it is N or fewer levels below the command line argument; --max-depth=0 is the same as --summarize --time show time of the last modification of any file in the directory, or any of its subdirectories --time=WORD show time as WORD instead of modification time: atime, access, use, ctime or status --time-style=STYLE show times using style STYLE: full-iso, long-iso, iso, +FORMAT FORMAT is interpreted like date’
–help display this help and exit
–version output version information and exit

Display values are in units of the first available SIZE from --block-size,
and the DU_BLOCK_SIZE, BLOCK_SIZE and BLOCKSIZE environment variables.
Otherwise, units default to 1024 bytes (or 512 if POSIXLY_CORRECT is set).

SIZE may be (or may be an integer optionally followed by) one of following:
KB 1000, K 1024, MB 10001000, M 10241024, and so on for G, T, P, E, Z, Y.

Report du bugs to bug-coreutils@gnu.org
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
Report du translation bugs to <http://translationproject.org/team/>
For complete documentation, run: info coreutils ‘du invocation’
Good:/var/mobile/Projects/IconRenamer root#

mini上的du命令明显没有-I这个选项么,而OSX上的du有,说明rpetrich的Theos没有针对iOS做过优化,你可以手动把iOS上的du命令给升级了(把pad3上的文件拷过来),让它支持-I选项

比较了两个设备的du文件是一样,我还是更换了下异常设备上的du,我打印了两个设备make messages的信息,比较发现有一处不一样,
正常make的中echo “Installed-Size: 136” >> “/private/var/mobile/Projects/IconRenamer//DEBIAN/control"
而异常make中是echo "Installed-Size: " >> "/private/var/mobile/Projects/IconRenamer/
/DEBIAN/control”
Size值是空的
还有就是那个du --I的错误,我手动逐条输入make messages就不会出现
补充一下,在那个正常的设备上,输入du --help也是没有 --I选项的

再补充一下,之前编译MD5错误
Making all for tweak IconRenamer…
/bin/sh: md5: command not found

这个会不会影响到这Size呢?

正常make加上messages=yes的输出是什么?

正常的输出
zhuangBzhuanyong:/var/mobile/Projects/IconRenamer root# make package messages=yes
Making all for tweak IconRenamer…
make -f Makefile --no-print-directory --no-keep-going
internal-library-compile
THEOS_CURRENT_TYPE=tweak THEOS_CURRENT_INSTANCE=IconRenamer THEOS_CURRENT_OPERATION=compile
THEOS_BUILD_DIR="." THEOS_MAKE_PARALLEL=yes
make[2]: Nothing to be done for internal-library-compile'. rm -rf "/private/var/mobile/Projects/IconRenamer/_" /var/theos/bin/fakeroot.sh -p "/private/var/mobile/Projects/IconRenamer/.theos/fakeroot" -c mkdir -p "/private/var/mobile/Projects/IconRenamer/_" -d layout ] && rsync -a "layout/" "/private/var/mobile/Projects/IconRenamer/_" --exclude "DEBIAN" --exclude "_MTN" --exclude ".git" --exclude ".svn" --exclude ".DS_Store" --exclude "._*" || true Making stage for tweak IconRenamer... mkdir -p "/private/var/mobile/Projects/IconRenamer/_/Library/MobileSubstrate/DynamicLibraries/" cp ./obj/IconRenamer.dylib "/private/var/mobile/Projects/IconRenamer/_/Library/MobileSubstrate/DynamicLibraries/" if -f IconRenamer.plist ]; then cp IconRenamer.plist "/private/var/mobile/Projects/IconRenamer/_/Library/MobileSubstrate/DynamicLibraries/"; fi mkdir -p "/private/var/mobile/Projects/IconRenamer/_/DEBIAN" rsync -a "/private/var/mobile/Projects/IconRenamer/layout/DEBIAN/" "/private/var/mobile/Projects/IconRenamer/_/DEBIAN" --exclude "_MTN" --exclude ".git" --exclude ".svn" --exclude ".DS_Store" --exclude "._*" sed -e '/^[Vv]ersion:/d' "/private/var/mobile/Projects/IconRenamer/layout/DEBIAN/control" > "/private/var/mobile/Projects/IconRenamer/_/DEBIAN/control" echo "Version: 1.2-5" >> "/private/var/mobile/Projects/IconRenamer/_/DEBIAN/control" echo "Installed-Size: 136" >> "/private/var/mobile/Projects/IconRenamer/_/DEBIAN/control" COPYFILE_DISABLE=1 /var/theos/bin/fakeroot.sh -p "/private/var/mobile/Projects/IconRenamer/.theos/fakeroot" -r dpkg-deb -b "/private/var/mobile/Projects/IconRenamer/_" "./com.rpetrich.iconrenamer_1.2-5_iphoneos-arm.deb" warning, /private/var/mobile/Projects/IconRenamer/
/DEBIAN/control’ contains user-defined field Name' warning, /private/var/mobile/Projects/IconRenamer/
/DEBIAN/control’ contains user-defined field Depiction' warning, /private/var/mobile/Projects/IconRenamer/
/DEBIAN/control’ contains user-defined field Author' warning, /private/var/mobile/Projects/IconRenamer//DEBIAN/control’ contains user-defined field Sponsor' warning, /private/var/mobile/Projects/IconRenamer//DEBIAN/control’ contains user-defined field dev' dpkg-deb: building package com.rpetrich.iconrenamer’ in `./com.rpetrich.iconrenamer_1.2-5_iphoneos-arm.deb’.
dpkg-deb: ignoring 5 warnings about the control file(s)
zhuangBzhuanyong:/var/mobile/Projects/IconRenamer root#

异常的输出
Good:/var/mobile/Projects/IconRenamer root# make package messages=yes
Making all for tweak IconRenamer…
make -f Makefile --no-print-directory --no-keep-going
internal-library-compile
THEOS_CURRENT_TYPE=tweak THEOS_CURRENT_INSTANCE=IconRenamer THEOS_CURRENT_OPERATION=compile
THEOS_BUILD_DIR="." THEOS_MAKE_PARALLEL=yes
make[2]: Nothing to be done for internal-library-compile'. rm -rf "/private/var/mobile/Projects/IconRenamer/_" /var/theos/bin/fakeroot.sh -p "/private/var/mobile/Projects/IconRenamer/.theos/fakeroot" -c mkdir -p "/private/var/mobile/Projects/IconRenamer/_" -d layout ] && rsync -a "layout/" "/private/var/mobile/Projects/IconRenamer/_" --exclude "DEBIAN" --exclude "_MTN" --exclude ".git" --exclude ".svn" --exclude ".DS_Store" --exclude "._*" || true Making stage for tweak IconRenamer... mkdir -p "/private/var/mobile/Projects/IconRenamer/_/Library/MobileSubstrate/DynamicLibraries/" cp ./obj/IconRenamer.dylib "/private/var/mobile/Projects/IconRenamer/_/Library/MobileSubstrate/DynamicLibraries/" if -f IconRenamer.plist ]; then cp IconRenamer.plist "/private/var/mobile/Projects/IconRenamer/_/Library/MobileSubstrate/DynamicLibraries/"; fi du: invalid option -- 'I' Try du --help’ for more information.
mkdir -p "/private/var/mobile/Projects/IconRenamer/
/DEBIAN"
rsync -a “/private/var/mobile/Projects/IconRenamer/layout/DEBIAN/” "/private/var/mobile/Projects/IconRenamer/
/DEBIAN" --exclude “MTN" --exclude “.git” --exclude “.svn” --exclude “.DS_Store” --exclude ".*”
sed -e ‘/^[Vv]ersion:/d’ “/private/var/mobile/Projects/IconRenamer/layout/DEBIAN/control” > "/private/var/mobile/Projects/IconRenamer/
/DEBIAN/control"
echo “Version: 1.2-10” >> “/private/var/mobile/Projects/IconRenamer//DEBIAN/control"
echo "Installed-Size: " >> "/private/var/mobile/Projects/IconRenamer/
/DEBIAN/control”
COPYFILE_DISABLE=1 /var/theos/bin/fakeroot.sh -p “/private/var/mobile/Projects/IconRenamer/.theos/fakeroot” -r dpkg-deb -b “/private/var/mobile/Projects/IconRenamer/_” “./com.rpetrich.iconrenamer_1.2-10_iphoneos-arm.deb”
dpkg-deb: parse error, in file /private/var/mobile/Projects/IconRenamer/_/DEBIAN/control' near line 15 package com.rpetrich.iconrenamer’:
EOF before value of field `Installed-Size’ (missing final newline)
make: *** [internal-package] Error 2

Making all for tweak IconRenamer…
/bin/sh: md5: command not found

这个会不会影响到这Size呢?

怀疑是这个MD5异常导致后边size出了问题,这里提示是/bin/sh下,那他的上级目录是什么呢

上级目录就是根目录,/

问题终于解决了,感谢狗神,感谢Naville,是在打包的时候写Size错误,导致打包失败,修改的方法就是找到 include $(THEOS)/makefiles/tweak.mk 这个文件,把里边写入size的命令去掉,Naville说size不影响,去掉后可以打包成功并且正常生效,再次感谢,不过Md5 无法找到的问题还是存在,只是没发现有任何影响

我也是同样的问题,我的 $(THEOS)/makefiles/tweak.mk 对应的是两个文件,在这两个文件里面并没有找到写入size的命令呀,还请大神给指点一下

1./opt/theos/makefiles/tweak.mk文件内容

ifeq ($(THEOS_CURRENT_INSTANCE),)
include $(THEOS_MAKE_PATH)/master/tweak.mk
else
ifeq ($(_THEOS_CURRENT_TYPE),tweak)
include $(THEOS_MAKE_PATH)/instance/tweak.mk
endif
endif

2./opt/theos/makefiles/master/tweak.mk文件内容

TWEAK_NAME := $(strip $(TWEAK_NAME))

ifeq ($(_THEOS_RULES_LOADED),)
include $(THEOS_MAKE_PATH)/rules.mk
endif

internal-all:: $(TWEAK_NAME:=.all.tweak.variables);

internal-stage:: $(TWEAK_NAME:=.stage.tweak.variables);

ifneq ($(TWEAK_TARGET_PROCESS),)
INSTALL_TARGET_PROCESSES += $(TWEAK_TARGET_PROCESS)
endif

TWEAKS_WITH_SUBPROJECTS = $(strip $(foreach tweak,$(TWEAK_NAME),$(patsubst %,$(tweak),$(call __schema_var_all,$(tweak)_,SUBPROJECTS))))
ifneq ($(TWEAKS_WITH_SUBPROJECTS),)
internal-clean:: $(TWEAKS_WITH_SUBPROJECTS:=.clean.tweak.subprojects)
endif

$(TWEAK_NAME):
@$(MAKE) -f $(_THEOS_PROJECT_MAKEFILE_NAME) --no-print-directory --no-keep-going $@.all.tweak.variables

$(eval $(call __mod,master/tweak.mk))

3./opt/theos/makefiles/instance/tweak.mk文件内容

ifeq ($(_THEOS_RULES_LOADED),)
include $(THEOS_MAKE_PATH)/rules.mk
endif

.PHONY: internal-tweak-all_ internal-tweak-stage_

LOCAL_INSTALL_PATH ?= $(strip $($(THEOS_CURRENT_INSTANCE)_INSTALL_PATH))
ifeq ($(LOCAL_INSTALL_PATH),)
LOCAL_INSTALL_PATH = /Library/MobileSubstrate/DynamicLibraries
endif

_LOCAL_USE_SUBSTRATE = $(or $($(THEOS_CURRENT_INSTANCE)_USE_SUBSTRATE),$(_THEOS_TARGET_DEFAULT_USE_SUBSTRATE),$(_THEOS_TRUE))
ifeq ($(call __theos_bool,$(_LOCAL_USE_SUBSTRATE)),$(_THEOS_TRUE))
_THEOS_INTERNAL_LDFLAGS += -F$(THEOS_VENDOR_LIBRARY_PATH) -framework CydiaSubstrate
else
_THEOS_INTERNAL_LOGOSFLAGS += -c generator=internal
endif

include $(THEOS_MAKE_PATH)/instance/library.mk

internal-tweak-all_:: internal-library-all_

internal-tweak-compile: internal-library-compile

ifneq ($(strip $($(THEOS_CURRENT_INSTANCE)_BUNDLE_RESOURCE_DIRS) $($(THEOS_CURRENT_INSTANCE)_BUNDLE_RESOURCE_FILES)),)
_LOCAL_BUNDLE_INSTALL_PATH = $(or $($(THEOS_CURRENT_INSTANCE)_BUNDLE_INSTALL_PATH),/Library/Application Support/$(THEOS_CURRENT_INSTANCE))
_LOCAL_BUNDLE_NAME = $(or $($(THEOS_CURRENT_INSTANCE)_BUNDLE_NAME),$(THEOS_CURRENT_INSTANCE))
_LOCAL_BUNDLE_EXTENSION = $(or $($(THEOS_CURRENT_INSTANCE)_BUNDLE_EXTENSION),bundle)

_THEOS_SHARED_BUNDLE_BUILD_PATH = $(THEOS_OBJ_DIR)/$(_LOCAL_BUNDLE_NAME).$(_LOCAL_BUNDLE_EXTENSION)
_THEOS_SHARED_BUNDLE_STAGE_PATH = $(THEOS_STAGING_DIR)$(_LOCAL_BUNDLE_INSTALL_PATH)/$(_LOCAL_BUNDLE_NAME).$(_LOCAL_BUNDLE_EXTENSION)
include $(THEOS_MAKE_PATH)/instance/shared/bundle.mk

internal-tweak-all_:: shared-instance-bundle-all
internal-tweak-stage_:: shared-instance-bundle-stage
endif

ifneq ($($(THEOS_CURRENT_INSTANCE)INSTALL),0)
internal-tweak-stage
:: $(EXTRA_TARGET) internal-library-stage
$(ECHO_NOTHING)if [[ ! -f “$(THEOS_CURRENT_INSTANCE).plist” && ! -f “$(THEOS_LAYOUT_DIR_NAME)/$(LOCAL_INSTALL_PATH)/$(THEOS_CURRENT_INSTANCE).plist” ]]; then
$(PRINT_FORMAT_ERROR) "You are missing a filter property list. Make sure it’s named $(THEOS_CURRENT_INSTANCE).plist. Refer to http://iphonedevwiki.net/index.php/Cydia_Substrate#MobileLoader." >&2;
exit 1;
elif [[ -f “$(THEOS_CURRENT_INSTANCE).plist” ]]; then
cp $(THEOS_CURRENT_INSTANCE).plist “$(THEOS_STAGING_DIR)$(LOCAL_INSTALL_PATH)/”;
fi$(ECHO_END)
endif

$(eval $(call __mod,instance/tweak.mk))