Xcode 6 - 如何为Ad-Hoc分发选择签名证书/配置文件?

144
为了将应用程序分发给我们的测试人员,我们使用Xcode,具体流程如下:
  • 归档应用程序
  • 分发至Ad-Hoc
  • 选择预配资料文件
  • 将 .ipa 文件保存到文件夹中
但是在 Xcode 6 中,这个工作流程有所改变。我仍然可以选择 Ad-Hoc 分发选项,但无法选择想要的预配资料文件。这使我们无法控制所使用的签名证书和预配资料文件配置(我们使用推送通知)。
默认情况下,使用“iPhone distribution”签名身份,并生成一种 XC Ad Hoc 预配资料文件,如下图所示:Exporting IPA 如果单击预配资料文件附近的箭头,则会打开预配资料文件所在的文件夹。
因此,我的问题是: 在 Xcode 6 中是否有任何方法可以选择与 Ad Hoc 分发一起使用的预配资料文件? 谢谢!

有人知道这个问题是否已经解决了吗?有没有办法将构建分发给iOS 7用户以测试推送通知? - haupman
使用Xcode 6 GM版本,同样的问题... - Chris Chen
那么我们还没有任何好的解决方案吗?下面的答案对我不起作用。我们可以使用XC配置文件吗?我不想浪费一周时间等待苹果审核。谢谢。 - Miles M.
2
今天我遇到了这个问题,似乎Xcode只使用注册在线设备的所有设备的分发配置文件。 - HackingOtter
1
真的吗?我们不能选择配置文件吗?我相信约瑟夫·约瑟夫·亚瑟里安还活着。 - ajbraus
不能选择设备真的很糟糕......测试飞行(好老的 web 版本)会向所有包含在构建配置文件中的设备的用户发送构建邀请电子邮件。 我为竞争组织制作应用程序-我不小心向它们发送了彼此应用程序的构建...... ;-D - Jonny
18个回答

52

我曾经遇到同样的问题,使用预装在Xcode 6中的命令行工具“xcodebuild”脚本解决了问题(不需要重新安装Xcode 5)。

http://www.thecave.com/2014/09/16/using-xcodebuild-to-export-a-ipa-from-an-archive/

终端中的脚本:

xcodebuild -exportArchive -archivePath $projectname.xcarchive -exportPath $projectname -exportFormat ipa -exportProvisioningProfile 'Provisioning Profile Name'

6
请注意,如果您的应用程序使用任何扩展、嵌入式框架或库,则此方法将无法正常工作。 - clarkcox3
4
这对我很有帮助,谢谢!所以苹果更新了XCode生成糟糕的XC Prov Profiles,但却忘记了XCodeBuild。这次我们只是走了狗屎运而已。哦,苹果是如何让我们受苦啊! - KamyFC
1
我真希望早三个小时就知道xcodebuild现在也可以导出ipa格式!我浪费了那么多时间试图让xcrun嵌入一个特定的配置文件,但它在Xcode 6上根本行不通。xcodebuild可以!谢谢。 - Oscar Hierro
1
苹果公司是否计划至少“修复”这个问题? - Lawrence Gimenez
1
看起来 xcodebuild 工具不再使用 -exportProvisioningProfile 参数了。 - The Dreams Wind
显示剩余2条评论

31

当我提交至App Store时,遇到了相似的问题。我创建了一个存档文件,然后点击“提交”,Xcode想要自动使用默认的“XC com.*”通配符配置文件进行签名,而不是已经存在的具体配置文件。

为了解决这个问题,我在苹果开发者门户重新生成了配置文件:

1)前往developer.apple.com找到你想使用的发布配置文件。
2)选择它,点击“编辑”,重新命名配置文件并点击“生成”。
3)将配置文件下载到桌面上,并将其拖放到Xcode 6图标上。
4)重新启动Xcode 6。
5)打开组织器窗口,然后在你编译的存档文件上点击“提交”。Xcode会自动选择你的具体配置文件而不是通用的。


你好,这个变化有官方声明吗? - frank
我不知道。我尝试在文本编辑器中比较旧和新的配置文件,看是否能够发现格式上的变化,但我没有注意到任何重大的变化。 - GingerBreadMane
2
我曾经持怀疑态度,但这对我起作用了。我刚刚转换到Xcode 6,并尝试输出我的第一个Ad Hoc构建。 - Newtz
到目前为止,我一直使用开发配置文件。这还能用吗?还是我需要创建分发配置文件? - Legoless
@Jonny 你试过这个答案了吗?Ad Hoc和App Store配置文件都是分发配置文件,我预计它们会受到导致此问题的相同根本问题的影响。 - GingerBreadMane
显示剩余6条评论

27

一旦您进入组织器

  • 选择即时构建,然后单击“导出...”
  • 选择“保存用于即时部署” -> 下一步
  • 不要从下拉菜单中选择组织机构,而是选择“使用本地签名资产” -> 选择
  • 像以前一样导出并保存 .ipa 文件。

当然,您需要生成、下载和安装即时配置文件。


5
由于这个答案和这个答案的帮助,问题得以解决。配置文件需要链接到一个与您的应用程序使用相同Bundle Identifier的显式App ID。通配符App ID将不起作用。然后,在导出应用程序时,您需要选择“使用本地签名资产”。 - Sarah Elan
@SarahElan 合并这两个答案并写一个新的答案...谢谢 - yoshiiiiiiii
根据我的经验和个人观点,我认为这是最好的答案。谢谢。 - Basem Saadawy

17

目前看来,最后生成的配置文件将会起作用。因此,您可以重新生成所需的配置文件并下载它,Xcode 将使用它。

稍微更好的方法是,在您的目标中设置所需的配置文件,然后使用命令行构建您的ipa文件,这也是可行的。

下面是我正在使用的脚本:

#!/bin/sh

# Current as working as of 2014/09/22
# Xcode 6

OUTPUTDIR="$HOME/build"
APPNAME="your-app"
SCHEME="your-app"
APP_WORKSPACE="$HOME/Path/To/your-app.xcworkspace"

rm "$OUTPUTDIR/$APPNAME.ipa" #deletes previous ipa
xcodebuild -workspace "$APP_WORKSPACE" -scheme "$SCHEME" archive -archivePath "$OUTPUTDIR/$APPNAME.xcarchive"
xcodebuild -exportArchive -exportFormat ipa -archivePath "$OUTPUTDIR/$APPNAME.xcarchive" -exportPath "$OUTPUTDIR/$APPNAME.ipa" 

以及我的设置:

Xcode settings


有没有更简单的方法? - Timur Bernikovich
我认为这是因为MacOS 10.0仍处于测试版。 - Timur Bernikovich
1
使用XC Ad Hoc配置文件的问题在于它们始终包括所有设备,这就取消了使用手动配置文件可以禁用某些设备的选项。 - Jonny
XC Ad Hoc配置文件只是一个示例。您可以使用任何您喜欢的配置文件。 - Thorsten
你应该从 -exportPath 的参数中删除 '.ipa' 扩展名,因为 xcodebuild 已经自动添加了它。 - Oscar Hierro

8
在Xcode 6(至少我现在使用的是6.1版本)中,当您进行adhoc导出时,xcode 6将自动扫描是否有任何包含开发者帐户中所有设备注册并同时匹配捆绑标识符的预配配置文件。如果没有,则会使用XC预配配置文件。因此,如果您想使用自己的配置文件,例如用于推送通知的目的,您需要在苹果开发者门户上选择您配置文件中的所有设备。我猜这就是为什么一些人重新创建配置文件可以解决问题而另一些人则不行的原因。
顺便说一句,使用脚本可以导出并上传到TestFlight,但设备无法下载。可能是我弄错了什么地方。如果有人知道原因,请告诉我。谢谢。

谢谢!这对我起作用了。我编辑了配置文件以包括所有设备,重新归档了应用程序,然后就可以使用正确的配置文件了。 - Erik Villegas
这就是问题所在,听起来像是一个bug,或者现在苹果推出了TestFlight来分发beta版本,AdHoc分发没有得到适当的关注。我遇到的情况与@AlexHsieh描述的一样;我像以前一样创建了我的配置文件,只选择了我所有注册设备的子集,当我尝试生成IPA时,Xcode找不到任何有效的配置文件,并尝试使用此自动生成的XC配置文件(在我的情况下也失败了)。解决方法是将我所有注册的设备添加到配置文件中。 - jjramos

8

我也无法理解这个问题 - 当我提交到AppStore时,它默认使用通配符配置文件,导致出现了错误。

最终我在Xcode 6中进行构建,然后返回Xcode 5的组织器窗口进行提交。这样它就会提示您选择要签名的配置文件。


这是我正在做的解决方法。但我现在真的想摆脱Xcode 5。我正在考虑现在使用xcrun和命令行。 - Legoless
我尝试了所有我找到的建议解决方案,但这是唯一一个真正有效的。 - HunTer DRF

7

这对我有用:

  1. 在“…选择开发团队…”对话框中单击“查看帐户…”。
  2. 单击“查看详细信息…”,找到XC Ad Hoc预配配置文件。
  3. 右键单击该配置文件,选择“在Finder中显示”。
  4. 删除所选的配置文件。
  5. 返回第1步中的对话框。
  6. 单击“选择”。
  7. 单击预配配置文件旁边的箭头以打开预配配置文件目录。
  8. 再次删除类似于第4步的通用配置文件。
  9. 从“向苹果发送[应用程序名称]:”对话框中单击“上一个”按钮。
  10. 重新选择“保存用于Ad Hoc部署”
  11. 再次单击“选择”按钮。

现在你应该能看到正确的预配配置文件名称了。


我没有尝试第一个,但这个对我有效。谢谢。=] - Glauco Neves
5
对我没有用。即使在第4步和第8步中删除了配置文件,配置文件仍会在第11步重新创建并自动选择。 - Chun
1
对我来说不起作用,因为每次我都必须点击选择一个帐户(我有多个帐户用于向客户交付应用程序),XC Generated配置文件就会重新创建。这是苹果的烦恼。 - wuf810
我想补充一点,在按照这些步骤使用XCode 6之前,您应该从您的苹果开发者账户中删除XC:*配置文件。在第4步之后,我会回到“查看详细信息”对话框并点击刷新按钮,以确保那些XC:*配置文件不再存在。此外,请使用Thorsten的构建设置来确保您选择了正确的配置文件。这对我有效了两次。 - Android Noob
我遇到了与@Chun和(@)wuf810相同的问题。这些该死的.mobileprovisions文件一直在重新生成。我的解决方法是保持“Provisioning Profiles”目录窗口打开,然后按照(@)user3382891的步骤,尽快删除生成的.mobileprovision记录。最终,Xcode选择了我正确的配置文件。现在我面临下一个问题... - kris

6
我有一个对我有效的解决方法。
我安装了Xcode 6和Xcode 5.1.1,Xcode 6在Applications中,而Xcode 5.1.1在另一个目录中。当我想要进行构建时,我使用Xcode 6创建存档。但是您也可以在Xcode 5.1.1中查看创建的存档,因此我使用Xcode 5.1.1使用我想要使用的配置文件来分发Ad Hoc .ipa。因此,使用Xcode 6进行构建,但使用Xcode 5.1.1进行分发。

我无法以这种方式将构建上传到TestFlight。 - hardik hadwani
如果您在构建和分发时使用相同的配置文件,则应该能够以这种方式将构建上传到测试飞行。请仔细检查您用于构建的配置文件是否与您用于分发的配置文件相同。 - Adam Freeman

4
在导出时使用本地签名资产解决了我的问题:enter image description here

3

@MrPatol的答案对我没有用。

在会员中心->iOS证书配置文件

  • 删除当你试图构建应用程序时默认设置的证书配置文件(例如“XC...”)。创建一个简短名称的广告证书配置文件(不是生产环境)。

在iPhone配置实用程序->证书配置文件

  • 删除相同的证书配置文件(例如“XC...”)

在Xcode->组织者

  • 选择广告构建并单击“导出...” 选择“保存以进行广告部署” ->下一步
  • 从下拉列表中选择一个组织
  • 检查您的新广告证书配置文件是否自动选择
  • 像之前一样导出和保存.ipa文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接