要想将程序放到iPhone上调试,并最终发布ipa用于分享,须要如下几个步骤:python
1.本身为本身颁发一个证书用于为生成的程序签名; 2.修改工程配置以及Xcode的配置文件和二进制文件以阻止其验证和签名; 3.经过自定义生成步骤,用伪造的证书为应用程序签名; 4.使用一点小技巧来生成ipa文件; 注意事项: 1.Xcode不要用dmg文件生成的应用,不然没法修改配置文件。 2.下方的Xcode文件夹须要根据自身Xcode所在文件夹调整。
打开实用工具-钥匙串访问。而后在菜单栏里点击钥匙串访问-证书助理-建立证书来打开向导。第一个步骤比较重要,必需要把名称命名为iPhone Developer,将类型设定为代码签名,将"让我覆盖这些默认值"选中。以后的步骤无需更改,一路点击“肯定”和“继续”来完成这个向导就能够!图片
###2、修改Xcode的配置文件app
1.请先将Xcode按Command+Q彻底关闭。 2.修改配置文件: 按照该路径找到SDKSettings.plist而后进行编辑: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/SDKSettings.plist 将如下两段中的YES改成NO <key>CODE_SIGNING_REQUIRED</key> <string>YES</string> <key>ENTITLEMENTS_REQUIRED</key> <string>YES</string>
###3.下面修改另一个文件:curl
按照该路径找到Info.plist而后进行编辑: Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Info.plist 将Info.plist中所有的XCiPhoneOSCodeSignContext 修改为 XCCodeSignContext,他们分别在DefaultProperties分支下、OverrideProperties分支下和RuntimeRequirements分支下。 图片
###4.添加文件:iphone
链接互联网后在终端执行: 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 若是没有联网,能够在/Applications/Xcode.app/Contents/Developer文件夹下建立一个iphoneentitlements文件夹,而后在该文件夹下手动建立一个gen_entitlements.py文件,并授予其执行权限(命令:sudo),这个文件的内容为: #!/usr/bin/env python import sys import struct if len(sys.argv) != 3: print "Usage: %s appnamedest_file.xcent" % sys.argv[0] sys.exit(-1) APPNAME = sys.argv[1] DEST = sys.argv[2] if not DEST.endswith('.xml') and notDEST.endswith('.xcent'): print "Dest must be .xml (for ldid) or.xcent (for codesign)" sys.exit(-1) entitlements = """ <?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE plist PUBLIC"-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>application-identifier</key> <string>%s</string> <key>get-task-allow</key> <true/> </dict> </plist> """ % 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()
###3、修改工程设置(真机调试闪退的,请仔细的看此步骤,这步就是关键问题所在)ide
特别注意:本阶段以前的修改配置文件、准备脚本等,只须要作一次。但本阶段的操做,对每一个须要真机调试的工程都要作一遍。 这个步骤的主要做用是支持真机调试,若是不作这个步骤,仍然能够经过步骤5来生成ipa在真机上运行,可是没法使用Xcode内置的调试器对在真机上运行的程序进行单步跟踪。若是您的程序在点击Run真机调试时秒退,请检查此步骤是否正确完成。 1.禁用Xcode自动的签名操做 将工程配置中全部的Code Signing选项所有设为Don't Code Sign,如图。可能须要先点击“All”让这个选项显示出来。 2.添加自定义的生成后脚本(Xcode5配置请看后文PS部分) 在Build Phases中添加一个Phase,右下角的Add Build Phase,而后单击Add Run Script,输入如下脚本: 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 如图所示: 至此配置所有完成,下面就能够插上iPhone,从新选择生成目标来测试一下在线调试了!若是是第一次使用该设备调试,请先在Organizer中将设备切换为开发模式(iPhone右部的小绿点亮)。
###4、生成IPA文件工具
若是个人程序调试好了,怎么才能发给别人用呢?正常状况下ipa文件是从Xcode的Organizer中输出的,可是咱们没有证书,这样输出会产生错误。咱们只能用个小技巧来完成这个操做了。 先将代码生成为Release目标,而后打开工程的输出文件夹,一般状况下这个目录是/Users/用户名/Library/Developer/Xcode/DerivedData/以工程名打头的文件夹/Build/Products/Release-iphoneos这个目录下有个xxx.app的文件,就是生成的程序了。把这个xxx.app拖到iTunes中,它会出如今应用程序那个列表中,而后再把它从iTunes的那个列表中拖出来(好比拖到桌面),它就这样变成xxx.ipa了!把这个.ipa发给别人,你们就能够跟您一块儿分享这个程序了。