概观
我们的命令行构建(构建和创造的.ipa)不再工作。
iTunesConnect已经开始拒绝建立使用该CODE_SIGN_RESOURCE_RULES_PATH
构建设置。
如果我们建立一个没有在设定PackageApplication工具(我们用它来创建签署的.ipa)失败。
看来,PackageApplication调用的/ usr / bin中/有资源的规则论证协同设计即使CODE_SIGN_RESOURCE_RULES_PATH
构建设置被排除在外
我怀疑PackageApplication需要更新,以便当它不调用在/ usr / bin中/有资源的规则论证协同设计CODE_SIGN_RESOURCE_RULES_PATH
构建设置被排除在外。
有没有人找到了一个解决方案?
细节
我们建立这样的命令行应用程序:
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'
我们创建这样的命令行上签了字的.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’”
如果我们去掉'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist'
从构建命令位后,开发的应用,而不CFBundleResourceSpecification
plist中键(这我相信是我们所希望的)。 新的build命令如下:
xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_ARCH=NO
现在的问题是,要建立的.ipa的命令失败,出现以下错误:
错误:在/ usr / bin中/协同设计--force --preserve元数据=标识符,权利资源规则--sign iPhone分布:MyTeam(XXXXXXXXXX)--resource规则= /变种/文件夹/ 2B / 7hylk7nn13dgrl9yyh2wp0lm0000gn / T /zDRRJMkKtQ/Payload/myApp.app/ResourceRules.plist --entitlements的/ var /文件夹/ 2B / 7hylk7nn13dgrl9yyh2wp0lm0000gn / T / zDRRJMkKtQ / entitlements_plistIUdGWLYe /var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/Payload/myApp.app失败,错误1.输出:警告:与选项--preserve元数据的使用“资源规则”(在Mac OS X> = 10.10不建议使用)!
警告:--resource的规则已被弃用,在Mac OS X> = 10.10! /var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/Payload/myApp.app/ResourceRules.plist:无法读取资源
看来,PackageApplication调用的/ usr / bin中/有资源的规则论证协同设计即使CODE_SIGN_RESOURCE_RULES_PATH
参数/编译设置被排除在外。
我认为PackageApplication需要更新,以便当它不调用在/ usr / bin中/有资源的规则论证协同设计CODE_SIGN_RESOURCE_RULES_PATH
参数/编译设置被排除在外。
苹果回来给我一个解决方案。 作为Xcode的7我们应该用xcodebuild
,而不是PackageApplication
产生.ipa文件。
xcodebuild联编有一个新的-exportArchive选项来创建一个更象的Xcode主办的的.ipa。
所以我们现在应该:
- 建立与归档
xcodebuild archive
- 创建具有的.ipa
xcodebuild -exportArchive
我们现在建立这样的档案:
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/myApp.xcarchive
和build/myApp.ipa
需要注意的是xcodebuild -exportArchive
需要-exportOptionsPlist
指向与出口选项的.plist文件参数。 有关可以放什么在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 USIG终端
清理项目:
发布
xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration ReleaseAdhoc -alltargets
调试
xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration Debug -alltargets
档案项目:
调试
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
这里有一个快速提示的情况下,你需要创建exportOptions.plist文件作为您的构建过程(也许詹金斯)的一部分。
您可以使用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/
我创建了一个项目名称myFirstApp和项目的位置是桌面/ myFirstApp。 经测试上Xcode
8.3
步骤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"