iOS的建立/ IPA创作不再命令行工作iOS的建立/ IPA创作不再命令行工作(iOS build

2019-05-13 06:04发布

概观

我们的命令行构建(构建和创造的.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参数/编译设置被排除在外。

Answer 1:

苹果回来给我一个解决方案。 作为Xcode的7我们应该用xcodebuild ,而不是PackageApplication产生.ipa文件。

xcodebuild联编有一个新的-exportArchive选项来创建一个更象的Xcode主办的的.ipa。

所以我们现在应该:

  1. 建立与归档xcodebuild archive
  2. 创建具有的.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.xcarchivebuild/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>&lt;none&gt;</string>
</dict>
</plist> 


Answer 2:

步骤,以使的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


Answer 3:

这里有一个快速提示的情况下,你需要创建exportOptions.plist文件作为您的构建过程(也许詹金斯)的一部分。

您可以使用plutil工具把JSON成的plist。 例:

echo "{\"method\":\"app-store\"}" | plutil -convert xml1 -o /tmp/exportOptions.plist -- -

请享用!



Answer 4:

转到项目文件夹:

存档:

为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/


Answer 5:

我创建了一个项目名称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"


文章来源: iOS builds / ipa creation no longer works from the command line