开发环境:Xcode 4.5.2 ios设备需要越狱并从Cydia安装appsync
安装appsync步骤:
1、找到安装的cydia,第一次运行将会弹出提示,选择开发者即可
2、在工具栏中选择软件源(iphone/itouch选管理),然后点右上角的编辑
3、点左上角添加
4、输入源: http://yuan.duowan.com/ (多玩的源),点添加源,等待添加完成,然后点返回Cydia,回到源界面,点击右上角的完成,完成源的添加。如果失败确认源地址后面是否加上/
5、选择刚才添加的源,选择合适版本的appsync安装即可。
注:如果列表中没有appsync可以用工具栏中的搜索,搜索appsync;另外cydia.hackulo.us源也可以
另:如果没有安装appsync的话,最后运行的话,会提示证书过期。
The identity used to sign the executable is no longer valid.
Please verify that your device’s clock is properly set, and that your signing certificate is not expired.
一、创建假证书
1、在Finder中找到Keychain Access(钥匙串访问)并打开。位置:Applications/Utilities
2、菜单->Keychain Access->Certificate Assistant->Create ACertificate,按下图设置。此处必须把Name改为iPhone Developer,Certificate类型设置为Code Signing,并将Let me override defaults选中,以后的步骤就不需要做任何的设置,全部默认或空着即可
二、修改Xcode的配置文件
需要修改SDKSettings.plist和Info.plist两个文件,网上说4.5之后必须用Xcode进行编辑,原因是这两个文件从原来的xml改为了二进制文件,经过试验用其编辑器也是可以的。另外需要修改这两个文件权限才进行修改,修改前最好备份下。
1、SDKSettings.plist:位置/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk
修改内容:DefaultProperties分支,将下面的CODE_SIGNING_REQUIRED和ENTITLEMENTS_REQUIRED两个属性改为NO
2、Info.plist:位置/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
修改内容:
1、将全部的XCiPhoneOSCodeSignContext修改成 XCCodeSignContext
2、在最后添加两项:
PROVISIONING_PROFILE_ALLOWED = NO
PROVISIONING_PROFILE_REQUIRED = NO
解释:将其中的iPhoneOS去掉
3、其他:二进制补丁
没有弄,猜测是4.x已经不再这个补丁了,至少是4.5.2不需要了
三、准备定自定义的生成脚本,需要机器能上网,在终端中执行如下命令
mkdir /Applications/Xcode.app/Contents/Developer/iphoneentitlements
cd /Applications/Xcode.app/Contents/Developer/iphoneentitlements
curl -O http://www.alexwhittemore.com/iphone/gen_entitlements.txt
mv gen_entitlements.txt gen_entitlements.py
chmod 777 gen_entitlements.py
注:python的内容为:
#!/usr/bin/env python
import sys
import struct
if len(sys.argv) != 3:
print "Usage: %s appname dest_file.xcent" % sys.argv[0]
sys.exit(-1)
APPNAME = sys.argv[1]
DEST = sys.argv[2]
if not DEST.endswith('.xml') and not DEST.endswith('.xcent'):
print "Dest must be .xml (for ldid) or .xcent (for codesign)"
sys.exit(-1)
entitlements = """
""" % APPNAME
f = open(DEST,'w')
if DEST.endswith('.xcent'):
f.write("\xfa\xde\x71\x71")
f.write(struct.pack('>L', len(entitlements) + 8))
f.write(entitlements)
f.close()
四、修改工程设置
特别注意:本阶段之前的修改配置文件、准备脚本等,只需要做一次。但本阶段的操作,对每个需要真机调试的工程都要做一遍。
这个步骤的主要作用是支持真机调试,如果不做这个步骤,仍然可以通过步骤5来生成ipa在真机上运行,但是无法使用Xcode内置的调试器对在真机上运行的程序进行单步跟踪。如果您的程序在点击Run真机调试时秒退,请检查此步骤是否正确完成。
1、禁用Xcode自动的签名操作,将工程配置中所有的Code Signing选项全部设为Don't Code Sign
2、添加自定义的生成后脚本,在Build Phases中添加一个Phase,右下角的Add Build Phase,然后单击Add Run Script,脚本如下:
Xcode 4.1/4.2
export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
if [ "${PLATFORM_NAME}" = "iphoneos" ] || [ "${PLATFORM_NAME}" = "ipados" ]; then
/Developer/iphoneentitlements401/gen_entitlements.py "my.company.${PROJECT_NAME}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent";
codesign -f -s "iPhone Developer" --entitlements "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/"
fi
Xcode 4.3/4.4/4.5
export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
if [ "${PLATFORM_NAME}" = "iphoneos" ] || [ "${PLATFORM_NAME}" = "ipados" ]; then
/Applications/Xcode.app/Contents/Developer/iphoneentitlements/gen_entitlements.py "my.company.${PROJECT_NAME}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent";
codesign -f -s "iPhone Developer" --entitlements "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/"
fi
如此就可进行真机调试了
五、生成IPA文件
正常情况下IPA是从Xcode的Organizer中输出,但是没有开发帐号,没有证书,仍旧这样输出的话会产生错误。
可以用下面的办法生成IPA文件:
1、将代码生成为Release目标
2、打开工程输出文件夹:/Users/你的用户名/Library/Developer/Xcode/DerivedData/以工程名打头的文件夹/Build/Products/Release-iphoneos
3、把该目标下的app文件,拖到iTunes中
4、再从iTunes中拖到任何一个位置,就会变成ipa安装包