Ios Xcode为目标依赖项构建不同的配置文件

Ios Xcode为目标依赖项构建不同的配置文件,ios,xcode,xcodebuild,Ios,Xcode,Xcodebuild,我正在尝试使用xcodebuild构建我的应用程序: xcodebuild -workspace "RG.xcworkspace" -scheme "Production" -configuration "Release" build CONFIGURATION_BUILD_DIR="${TEMP_DIR}" PROVISIONING_PROFILE="1234-5678-9098-7654-3210" 我的计划有两个目标。一个目标是应用程序,另一个是应用程序扩展(我为Safari构建了一个扩

我正在尝试使用xcodebuild构建我的应用程序:

xcodebuild -workspace "RG.xcworkspace" -scheme "Production" -configuration "Release" build CONFIGURATION_BUILD_DIR="${TEMP_DIR}" PROVISIONING_PROFILE="1234-5678-9098-7654-3210"
我的计划有两个目标。一个目标是应用程序,另一个是应用程序扩展(我为Safari构建了一个扩展)。应用程序扩展是一个目标依赖项。每个目标都需要一个单独的资源调配配置文件。我不知道如何为依赖项指定配置文件。我得到了这个错误,正如预期的那样:

CodeSign error: code signing is required for product type 'App Extension' in SDK 'iOS 8.1'

StackOverflow和xcodebuild的手册页似乎什么都没有。有人知道如何使用xcodebuild构建一个依赖于两个配置文件的项目吗?

我今天花了太多时间在这方面。我正要睡觉,突然想到了答案:

在每个目标的构建设置中,您应该为配置文件名设置一个
$VARIABLE
。为此,请从配置文件列表底部选择“其他”。执行此操作将打开一个文本字段-为每个目标选择不同的
$VARIABLE
-例如,我为容器应用程序目标选择了
$APP\u PROFILE
,为今天的扩展目标选择了
$EXTENSION\u PROFILE

这将导致如下情况:

最后,当使用
xcodebuild
进行构建时,请像使用
配置文件
那样指定配置文件UUID:

xcodebuild ... APP_PROFILE="85b6f019-d5e5-43a7-9e8f-e3aaed64a7e4" EXTENSION_PROFILE="e50cf605-ab63-40ad-8329-2758359ea748"
从XCode内部构建似乎不受影响-据我所知,XCode正在选择默认配置文件(好像处于“自动”模式)

理论上,这也将支持多个扩展


适用于我的XCode 6.3:)

几个月后。。。找到了一个解决方案,该解决方案不涉及Xcode中的设置值:在Xcode中,有一个可以使用给定的配置文件重新调整ipa文件。以下是我的作品:

bash resign.sh Experiments-AdHocProd.ipa "iPhone Distribution: Company Pty Ltd" output.ipa -p com.company.experiments.AudioPlugin=Experiments-AdHocProd_com.company.experiments.AudioPlugin.mobileprovision -p com.company.experiments=Experiments-AdHocProd.mobileprovision --verbose
其中:

  • 实验AdHocProd.ipa
    是现有的ipa
  • com.company.experiments.AudioPlugin
    是扩展包ID
  • Experiments-AdHocProd\u com.company.Experiments.AudioPlugin.mobileprovision
    是扩展配置文件
  • com.company.experiments
    是应用程序包的主要标识符
  • 实验AdHocProd.mobileprovision
    是主要的应用程序配置文件
每个配置文件的绑定标识符必须与将与其签名的应用程序的绑定标识符匹配

我发现需要注意的一点是,如果bundle标识符有一个通配符(在我的例子中,
prod.mobileprovision
有),那么带有显式ID的概要文件必须首先传递到
-p



或者,您可以使用
sigh
执行辞职。不幸的是,
sigh-help
并没有说明如何使用扩展来调整二进制文件,然而
sigh-demit-help
却说明了这一点

在Swift中,Pod文件框架将单独打包。 以下步骤解决了问题

 1. Select pods 
 2. Targets
 3. General
 4. Edit bundle id
 5. Build Settings
 6. Code Signing
 7. Provisioning profile -> select the valid profile
 8. Code Signing Identity -> Select the respective identity from
    profile.
对所有目标重复相同的操作

我能够生成生成。

无变量的解决方案 有一个选项,
-exportSigningIdentity
可以帮助您,因为应用程序和扩展/小部件的配置文件可能不同,但应用程序和扩展的签名身份应该相同

比如你会看到,

  • TargetApp->生成设置->“代码签名标识(id)”(版本)
  • TargetExtension->Build Settings->“代码签名标识(id)”(版本)
本质上是相同的字符串,假设此标识为“代码签名标识(id)”。因此,要构建和导出归档文件,您可以运行的操作非常简单

打扫
xcodebuild clean-workspace HelloWorld.xcworkspace-scheme HelloWorld

建筑
xcodebuild-workspace HelloWorld.xcworkspace-scheme HelloWorld archive-archivePath~/output/HelloWorld.xarchive

出口
xcodebuild-exportArchive-exportFormat ipa-archivePath~/output/HelloWorld.xarchive-exportPath“HelloWorld.ipa”-exportSigningIdentity“代码签名标识(id)”


参考资料:

如果我是你,我会创建两个不同的方案。每个目标一个方案?当一个是应用程序扩展时,我如何组合目标?嘿,非常好。谢谢我快发疯了,你应该得到一枚奖牌。。。我仍然不能相信应用程序扩展的分发机制是如此的缺乏文档化Apple@apouche如果您仍在使用此功能,您可能更喜欢另一种解决方案-我添加了另一个答案:)只需创建更多配置。然后,您就不需要在命令行中指定概要文件名了。我尝试过这样做,但与您在上一段的第三段中所说的相反,Xcode开始抱怨这里提到的显式概要文件与其他地方提到的“自动”概要文件之间不匹配。嗯,只有当一个人有多个苹果账户时,这才有帮助吗?在维护配置文件时,我认为这不会帮助我从旧配置文件切换到新配置文件。顺便说一句,文档页面是针对xcode5 2013的,而我们现在使用的是8.3。我认为新xcode现在没有任何单独的cli联机文档。通常情况下,两个目标应该在同一个帐户下。是的,它有效。这对我不起作用。在您的示例中尝试构建TargetApp时,我发现TargetApp和TargetExtension都出现错误,“需要具有关联域、应用程序组和推送通知功能的配置文件”。似乎不设置或不提供配置文件确实有效。在我的例子中,我正在尝试构建一个第三方应用程序,我无法控制xcode项目设置,我希望构建命令行来自动化这个过程。