iOS构build/ ipa创build不再可以从命令行工作
概观
我们的命令行构build(构build和创build.ipa)不再有效。
iTunesConnect已经开始拒绝使用CODE_SIGN_RESOURCE_RULES_PATH
构build设置的构build。
如果我们没有这个设置,我们使用PackageApplication工具(我们用来创build签名的.ipa)失败。
看起来,即使CODE_SIGN_RESOURCE_RULES_PATH
构build设置被排除,PackageApplication也会使用资源规则参数调用/ usr / bin / CODE_SIGN_RESOURCE_RULES_PATH
我怀疑PackageApplication需要更新,以便在排除CODE_SIGN_RESOURCE_RULES_PATH
构build设置时CODE_SIGN_RESOURCE_RULES_PATH
使用资源规则参数调用/ usr / bin / CODE_SIGN_RESOURCE_RULES_PATH
。
有没有人find这个解决scheme?
细节
我们在命令行上构build我们的应用程序,如下所示:
xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_ARCH=NO 'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist'
我们在命令行上创build签名的.ipa,如下所示:
xcrun -log -sdk iphoneos PackageApplication "/Users/mpv/dev/myApp/build/AppStoreDistribution-iphoneos/myApp.app" -o "/Users/mpv/dev/myApp/build/AppStoreDistribution-iphoneos/myApp.ipa" -sign "iPhone Distribution: MyTeam (XXXXXXXXXX)" -embed /Users/mpv/Library/MobileDevice/Provisioning\ Profiles/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.mobileprovision
iTunesConnect现在拒绝我们的版本,出现以下错误:
“这个包是无效的Info.plist包含myApp [myApp.app]包中的一个无效的键”CFBundleResourceSpecification“
如果我们从构build命令中删除了'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist'
位,那么应用程序就没有CFBundleResourceSpecification
plist键(我认为是我们想要的)。 新的生成命令如下所示:
xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_ARCH=NO
现在的问题是,构build.ipa的命令失败,出现以下错误:
错误:/ usr / bin / codesign –force –preserve-metadata =标识符,授权,资源规则–sign iPhone分发:MyTeam(XXXXXXXXXX)–resource-rules = / var / folders / 2b / 7hylk7nn13dgrl9yyh2wp0lm0000gn / T /zDRRJMkKtQ/Payload/myApp.app/ResourceRules.plist –entitlements / var / folders / 2b / 7hylk7nn13dgrl9yyh2wp0lm0000gn / T / zDRRJMkKtQ / entitlements_plistIUdGWLYe /var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/Payload/myApp.app失败,并显示错误1.输出:警告:使用–preserve-metadata选项“resource-rules”(在Mac OS X中不推荐使用= 10.10)!
警告: – 在Mac OS X> = 10.10中不推荐使用资源规则! /var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/Payload/myApp.app/ResourceRules.plist:无法读取资源
看起来,即使CODE_SIGN_RESOURCE_RULES_PATH
参数/构build设置被排除,PackageApplication也会使用资源规则参数调用/ usr / bin / CODE_SIGN_RESOURCE_RULES_PATH
。
我认为PackageApplication需要更新,以便在排除CODE_SIGN_RESOURCE_RULES_PATH
参数/构build设置时, CODE_SIGN_RESOURCE_RULES_PATH
使用资源规则参数调用/ usr / bin / CODE_SIGN_RESOURCE_RULES_PATH
。
苹果公司find了解决scheme。 从Xcode 7开始,我们应该使用xcodebuild
而不是PackageApplication
来生成.ipa文件。
xcodebuild有一个新的-exportArchive选项来创build一个更像Xcode Organizer的.ipa。
所以我们现在应该:
- 用
xcodebuild archive
build立一个xcodebuild archive
- 用
xcodebuild -exportArchive
创buildxcodebuild -exportArchive
我们现在build立这样的档案:
xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution archive -archivePath $PWD/build/myApp.xcarchive
我们现在这样导出.ipa:
xcodebuild -exportArchive -archivePath $PWD/build/myApp.xcarchive -exportOptionsPlist exportOptions.plist -exportPath $PWD/build
这两个命令创build文件build/myApp.xcarchive
和build/myApp.ipa
请注意, xcodebuild -exportArchive
需要指向带有导出选项的.plist文件的-exportOptionsPlist
参数。 要获得可以放入plist的完整列表,请运行xcodebuild -help
。 该文件的最小内容如下所示:
<?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>method</key> <string>app-store</string> <key>teamID</key> <string>YOUR_TEN_CHARACTER_TEAM_ID</string> </dict> </plist>
在Xcode 9中,您现在必须在exportOptions.plist中指定更多详细信息,如下所示:
<?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>compileBitcode</key> <false/> <key>method</key> <string>ad-hoc</string> <key>provisioningProfiles</key> <dict> <key>my.bundle.idenifier</key> <string>My Provisioning Profile Name</string> </dict> <key>signingCertificate</key> <string>iPhone Distribution</string> <key>signingStyle</key> <string>manual</string> <key>stripSwiftSymbols</key> <true/> <key>teamID</key> <string>YOURTEAMID</string> <key>thinning</key> <string><none></string> </dict> </plist>
制作iPA Usigterminal的步骤
清洁项目:
发布
xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration ReleaseAdhoc -alltargets
debugging
xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration Debug -alltargets
存档项目:
debugging
xcodebuild archive -project ProjectPath/myApp.xcodeproj -scheme “myApp” -configuration Debug -archivePath pathForArchiveFolder/myApp.xcarchive
发布
xcodebuild archive -project ProjectPath/myApp.xcodeproj -scheme “myApp” -archivePath pathForArchiveFolder/myApp.xcarchive
导出IPA
较早的版本:这可能会给已签名的资源添加,修改或删除。 错误
xcodebuild -exportArchive -archivePath projectPath/myapp.xcarchive -exportPath projectPath/myApp.ipa -exportFormat ipa -exportProvisioningProfile “provisioning profile”
新版本:
xcodebuild -exportArchive -archivePath ProjectPath/myapp.xcarchive -exportPath projectPath/myApp.ipa -exportOptionsPlist ProjectFolder/exportPlist.plist
这里有一个快速的提示,如果你需要创buildexportOptions.plist文件作为你的构build过程的一部分(也许jenkins)。
您可以使用plutil
工具将JSON转换为plist。 例:
echo "{\"method\":\"app-store\"}" | plutil -convert xml1 -o /tmp/exportOptions.plist -- -
请享用!
转到项目文件夹:
存档:
对于DEBUG:
xcrun xcodebuild -scheme MyApp -configuration Debug archive -archivePath build/MyApp.xcarchive
发行版:
xcrun xcodebuild -scheme MyApp -configuration Release archive -archivePath build/MyApp.xcarchive
取iPA:
xcrun xcodebuild -exportArchive -exportPath build/ -archivePath build/MyApp.xcarchive/
我已经创build了一个项目名称myFirstApp,项目的位置是Desktop / myFirstApp。 在Xcode
8.3
上testing
步骤1 –
cd /Users/Ved/Desktop/myFirstApp/
第2步 –
xcodebuild -scheme myFirstApp archive \ -archivePath /Users/Ved/Desktop/myFirstApp.xcarchive
步骤3 –
xcodebuild -exportArchive -exportFormat ipa \ -archivePath "/Users/Ved/Desktop/myFirstApp.xcarchive" \ -exportPath "/Users/Ved/Desktop/myFirstApp.ipa" \ -exportProvisioningProfile "myFirstAppDevProfile"