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


143

要将应用分发给我们的测试人员,我们使用Xcode,我们使用以下过程进行操作:

  • 存档申请
  • 分发临时广告
  • 选择配置文件
  • 将.ipa保存到文件夹

但是使用Xcode 6时,此工作流程有所更改。我仍然可以选择即席分发选项,但是无法选择所需的配置文件。这使我们无法控制使用哪个签名证书和配置概要文件配置(我们使用推送通知)。

默认情况下,使用iPhone distribution签名身份并XC Ad Hoc生成某种类型的配置文件,如下图所示:汇出IPA 如果单击配置文件旁边的箭头,它将打开包含配置文件的文件夹。

所以我的问题是:

Xcode 6中是否可以选择用于Ad Hoc分发的配置文件?

谢谢!


有谁知道这个问题是否已经解决?无论如何,有没有向iOS 7用户分发构建以测试推送通知?
haupman 2014年

使用Xcode 6 GM版本,同样的问题...
Chris Chen

因此,我们仍然没有任何好的解决方案?以下答案对我不起作用。我们可以使用XC供应配置文件吗?我不想花一个星期等待苹果的评论。谢谢
Miles M.

2
我今天遇到了这个问题,似乎Xcode仅使用使用您在线注册的所有设备的分发配置文件。
HackingOtter

1
认真吗 我们无法选择配置文件?我相信优素里亚人生活。
2014年

Answers:


52

我遇到了相同的问题,使用命令行“ xcodebuild”工具脚本解决了该问题,该脚本已预装了Xcode 6(不需要重新安装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'

1
这对我有用!使用的其他答案xcodebuild没有-exportProvisioningProfile切换。
bunnyhero 2014年

6
请注意,如果您的应用程序使用任何扩展,嵌入式框架或库,则此方法将无法正常工作。
clarkcox3 2014年

4
这对我有帮助。谢谢!因此,Apple更新了XCode来生成糟糕的XC Prov配置文件,但忘记了XCodeBuild。这次我们很幸运。哦! 苹果如何使我们受苦!
kamyFC 2014年

1
我将此设为接受的答案。答案可能并非在所有情况下都适用,但可以通过某些修改将xcodebuild用于解决此问题(这是我们在CI服务器上所做的工作)。
Legoless 2014年

1
我希望我早在3个小时前就知道xcodebuild现在也可以导出为ipa格式了!我浪费了很多时间试图让xcrun嵌入给定的配置文件,但是它在Xcode 6上不起作用。xcodebuild可以!谢谢。
奥斯卡·耶罗

31

提交至App Store时遇到类似的问题。我创建了一个存档,然后单击“提交”,Xcode希望使用默认的“ XC com。*”通配符配置配置文件(而不是已经拥有的显式配置文件)自动签名。

为了解决这个问题,我只是在Apple Developer Portal上重新生成了配置文件:

1)转到developer.apple.com并找到要使用的分发配置文件。
2)选择它,单击“编辑”,重命名配置文件,然后单击“生成”。
3)将配置文件下载到桌面,并将其拖到Xcode 6图标上。
4)重新启动Xcode6。5
)打开管理器窗口,然后在生成的存档上单击“提交”。Xcode将自动选择您的显式配置文件,而不是通用配置文件。


嗨,有关于此更改的官方声明吗?
2014年

从来没听说过。我尝试在文本编辑器中比较旧配置文件和新配置文件,以查看是否可以发现格式更改,但是我没有注意到任何重要内容
GingerBreadMane 2014年

2
我对此表示怀疑,但这对我有用。我才刚刚切换到Xcode 6,并尝试输出我的第一个临时版本
Newtz

到目前为止,我一直使用“开发”配置文件。这仍然可用还是我需要创建分发配置文件?
Legoless

是的,Legoless,您需要创建分发配置文件以导出构建。当设备连接到Mac时,您仍然可以使用开发配置文件进行调试。
codeburn 2014年

27

进入主办方后

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

当然,您需要已经生成,下载并安装了临时配置文件。


5
通过此答案和此答案解决了问题。供应配置文件需要链接到显式应用程序ID,该ID使用与您的应用程序相同的捆绑包标识符。通配符应用程序ID无效。然后,在导出应用程序时,您需要选择“使用本地签名资产”。
Sarah Elan 2015年

@SarahElan结合了两个答案并写了一个新答案……谢谢
YaBoiSandeep

根据我的观点和经验,我认为这是最好的答案。谢谢。
2016年

17

似乎最后一个生成的配置文件现在赢了。因此,您只需重新生成所需的配置文件并下载它,Xcode就会使用它。

更好的方法是:在目标中设置所需的prov配置文件,并使用命令行来构建您的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设置


有没有更简单的方法?
Timur Bernikovich 2014年

我认为是因为MacOS 10.0。仍处于测试阶段。
Timur Bernikovich 2014年

1
使用XC Ad Hoc配置文件的问题在于它们始终包含所有设备-取消了禁用某些可以使用手动配置文件进行操作的设备的选项。
2014年

XC Ad Hoc配置文件只是一个示例。您可以使用任何喜欢的个人资料。
Thorsten

您应该从-exportPath的参数中删除扩展名“ .ipa”,因为xcodebuild已自动添加该扩展名。
奥斯卡·耶罗

8

我也无法弄清楚-提交给AppStore时会有点麻烦,因为它默认为通配符配置文件。

我最终在Xcode 6中进行构建,然后返回Xcode 5的Organizer窗口进行提交。这样,它将提示您选择一个个人资料进行登录。


这是我正在解决的方法。但是我真的很想现在摆脱Xcode 5。我正在考虑现在使用xcrun和命令行。
Legoless

我确实尝试了所有发现的建议解决方案,但这是唯一可行的解​​决方案。
HunTer DRF 2014年

8

在Xcode 6(我现在至少使用6.1)中,当您进行临时导出时,xcode 6将自动扫描是否有任何配置文件包含在开发者帐户中注册的所有设备,并且同时匹配包ID。 。如果否,它将使用XC供应配置文件。因此,例如,如果要使用自己的配置文件(例如,为了进行推送通知),则需要在Apple开发人员门户上选择配置文件中的所有设备。我想这就是为什么有些人重新创建个人资料会起作用而有些人不会的原因。

顺便说一句,使用脚本可以导出并上传到testflight,但设备无法下载。可能是我错了。如果有人知道为什么,请告诉我。ks


谢谢!这对我有用。我编辑了配置文件以包括所有设备,重新存档了该应用程序,中提琴使用了正确的配置文件。
Erik Villegas 2014年

就是这样,这对我来说似乎是个错误,或者既然Apple引入了TestFlight来分发beta版本,AdHoc分发并没有得到应有的重视。@AlexHsieh所描述的就是我身上发生的一切;我像以前一样创建了自己的配置文件,仅选择了所有注册设备的一个子集,当我尝试生成IPA时,Xcode找不到任何有效的配置文件,并尝试使用此自动生成的XC文件(在我的情况下也失败)。解决方法是将我所有注册的设备添加到配置文件中。
jjramos 2014年

7

这为我工作:

  1. 在“ ..选择开发团队..”对话框中,单击“查看帐户..”。
  2. 单击“查看详细信息。”,然后找到XC Ad Hoc设置配置文件。
  3. 右键单击该配置文件,然后选择“在Finder中显示”。
  4. 删除所选的配置文件。
  5. 返回到步骤1中的对话框。
  6. 点击“选择”。
  7. 单击预配置文件附近的箭头以打开预配置文件目录。
  8. 再次删除通用配置文件,如步骤4所示。
  9. 单击“将[应用程序名称]发送到Apple:”对话框中的“上一个”按钮。
  10. 再次选择“保存以用于临时部署”
  11. 再次单击“选择”按钮。

现在,您应该看到正确的供应配置文件名称。


我没有尝试第一个。但这对我有用。谢谢。=]
Glauco Neves

5
没为我工作。即使删除步骤4和8的配置文件后,配置文件得到重建,并自动在步骤11再次选择

1
这对我不起作用,因为每次我必须单击选择一个帐户(我有多个用于向我的客户交付应用程序的帐户)时,都会重新创建XC生成的配置文件。苹果的PITA。
wuf810 2014年

我要补充一点,在对XCode 6执行这些步骤之前,应从Apple开发人员帐户中删除XC:*配置文件。步骤4之后,我将返回“查看详细信息”对话框,然后单击“刷新”按钮以确保不再存在那些XC:*配置文件。另外,使用Thorsten的构建设置来确保选择正确的配置文件。为我工作了两次。
Android Noob 2014年

我遇到了与@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 .c。因此,使用Xcode 6进行构建,但使用Xcode 5.1.1进行分发。


我无法以这种方式将版本上传到testflight。
hardik hadwani 2014年

如果您使用相同的配置文件进行构建和分发,那么您应该能够以这种方式上载构建以测试飞行。仔细检查您用于构建的配置文件与用于分发的配置文件是否相同。
亚当·弗里曼


3

@MrPatol的答案对我不起作用。我的Xcode 6.3.2工作方案

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

  • 删除在尝试构建应用程序时默认设置的配置文件(例如“ XC ...”)。创建一个简短的临时配置文件(非生产)。

在iPhone配置实用程序->设置配置文件中

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

在Xcode-> Organizer中

  • 选择临时构建,然后单击“导出...”。选择“保存以进行临时部署”->下一步
  • 从下拉列表中选择一个组织
  • 检查是否自动选择了新的临时配置文件
  • 像以前一样导出并保存.ipa。

2

这是为我解决问题的两个关键点。

  • 生成配置文件时,它需要链接到Explicit App ID使用与应用程序相同的捆绑包标识符。通配符应用程序ID无效。
  • 导出应用程序以进行临时部署时,在下拉列表中选择“ 使用本地签名资产 ”,然后单击“选择”。

Xcode将通过将应用程序ID与应用程序的捆绑标识符匹配来找到正确的配置文件。


1

实际上,您需要创建一个新的分发配置文件,专门用于临时部署。可以在经典会员中心找到它,但这是一种新型的证书。

然后,您可以选择使用哪些设备来测试应用程序,就像对开发者资料一样。

当您以常规方式从管理器中导出包裹时,新创建的证书将可用。

或者,您可以使用Apple随iOS 8提供的TestFlight解决方案,使您的用户可以访问预发行版本。

在此处输入图片说明


是的,但是正如您所指出的,这仅意味着iOS8。苹果公司特别愚蠢,迫使Testflight用户只能使用iOS8。好一会儿,最大的安装基础仍然是iOS7,因此苹果应该允许这样做。
wuf810 2014年

1

我遇到了同样的问题,最后我解决了它,它重新生成了我想在Xcode 6中使用的配置文件,包括我在iOS Dev帐户中注册的所有设备,这样做的话,在选择导出时,它显示了正确的配置文件,我无需使用脚本即可使用Xcode 6进行临时导出。希望能帮助到你。


1
这可行,但前提是您对包含使用iOS开发者帐户注册的所有设备的配置文件没问题。要仅使用供应配置文件中的一部分设备,我必须使用此技术:stackoverflow.com/a/26296138/71262
Oran Dennison 2014年

0

我已经为此使用了一段时间,但是使用了Crashlytics解决问题,在Xcode项目的构建设置中使用选定的配置文件进行了分布式构建。

希望它对某人有帮助。


0

几乎相同的问题。创建要分发的存档(产品>存档)后,导出存档(单击“导出...”),然后选择“保存以进行企业部署”;然后“下一步”。然后,选择默认的“开发团队”(例如组织名称),然后单击“选择”。最后,您将看到一个摘要视图,该视图还列出了Xcode自动为您找到(可能是即时创建)的配置文件。此MIGHT可能是错误的配置文件(通常是通配符配置文件,如“ XC:*”),并且由于在开发人员门户上已经存在通配符配置文件,因此可能会发生。

我为此使用了支持票,并且仅获得了此链接https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/ConfiguringPushNotifications/ConfiguringPushNotifications.html#//apple_ref/doc/uid/TP40012582 -CH32-SW1。并不是很大的帮助。

我发现MrPatol的解决方案也适用于企业部署,并为我们解决了问题。我首先登录开发人员门户并手动创建适合我的应用程序的配置文件。然后下载并安装新的手动创建的配置文件。


0

在xcode 7中,我无法通过以下方式选择临时配置

组织者->上传到App Store和组织者->验证

但是我可以通过Organizer-> Export选择

编辑:

将临时导出到应用商店以进行testFlight导出后上载应用导致了此处讨论的另一个问题。因此,解决这两个问题是一个。创建AppStore设置,使其能够通过管理器进行选择,并通过上传到appstore来利用testFlight。


0
  1. 我认为这是在Xcode 7之后指定-exportOptionsPlist选项的正确方法。无论您在项目设置中指定什么内容,它都会像在GUI导出中一样选择正确的配置文件。

xcodebuild -exportArchive -archivePath $ Archive_Path -exportPath $ LOCAL_PACKAGE_DIR -exportOptionsPlist $ Export_Plist_Path

optionPlist文件是这样的,

<dict>
  <key>teamID</key>
        <string>MYTEAMID123</string>
        <key> teamID </key>
        <string>app-store</string>
        <key>uploadSymbols</key>
        <true/>
</dict>


<plist>

应用商店,企业,临时,开发是替代方案

  1. 但是您可能会在上述之后遇到另一个错误。

错误域= IDEDistributionErrorDomain代码= 14“未找到适用的设备。” UserInfo = {NSLocalizedDescription =找不到适用的设备。}

这是一个红宝石问题。试试这个shell脚本,xcbuild-safe.sh

xcbuild-safe.sh xxxxNormalOptionsInXcodebuild bla...
  1. 等待片刻,另一个奇怪的错误来了。

xcbuild-safe.sh:第62行:shell_session_update:未找到命令

到底是什么shell_session_update?让我们解决它。只需在真正的xcodebuild cmd之前定义一个函数,即在60或61行。

function shell_session_update() { :; }

-4

在回答您的特定问题时,没有办法选择要使用的配置文件。您正在尝试做什么?(即您要选择的配置文件允许自动生成的配置文件不允许什么?)


1
例如,具有可用于该应用程序的UDID的特定列表。我正在为多个客户开发应用程序,我无法将它们混淆。当然,有很多解决方法,但是所有这些方法都比选择我要使用的配置文件复杂得多
Lope 2014年

最肯定有一种选择要使用的配置文件的方法。stackoverflow.com/a/26296138/71262
奥兰·丹尼森

1
@Lope如果客户端安装了您的一个应用程序并关联了配置文件,则他们可以安装您的任何应用程序(即使其他应用程序的配置文件不包含其设备)。这种混乱是我们希望使开发人员远离手动指定其配置文件和设备列表的主要原因之一。(即,许多人似乎将错误的安全感作为想要手动指定配置文件的主要原因)
clarkcox3 2014年

@ clarkcox3好,更糟糕的是,我想防止客户端看到彼此的应用程序
Lope 2014年

@Lope:我不知道一种分发临时ipa文件的方法,该文件会使您的所有应用可供测试人员使用。换句话说,您必须向测试人员明确提供要他们测试的应用程序,对吗?这种物理上的隔离将阻止他们使用任何其他应用程序。(这不是他们可以在商店中获得所有产品,是吗?)还有另一种方法,您的测试人员可以在未经您许可的情况下访问您的所有应用程序???
leanne 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.