ChatGPT解决这个技术问题 Extra ChatGPT

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

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

归档申请

临时分发

选择配置文件

将 .ipa 保存到文件夹

但是在 Xcode 6 中,这个工作流程发生了一些变化。我仍然可以选择 Ad-Hoc 分发选项,但我无法选择我想要的配置文件。这使我们无法控制使用哪个签名证书和配置文件配置(我们使用推送通知)。

https://i.stack.imgur.com/4ssU0.png

所以我的问题是:

Xcode 6 中是否有任何方法可以选择与 Ad Hoc 分发一起使用的配置文件?

谢谢!

有谁知道这是否已修复?是否有向 iOS 7 用户分发构建以测试推送通知?
使用 Xcode 6 GM 版本,同样的问题...
所以我们仍然没有任何好的解决方案?下面的答案对我不起作用。我们可以使用 XC 配置文件吗?我不想浪费一周等待苹果审查。谢谢
我今天遇到了这个问题,似乎 Xcode 只使用使用您在线注册的所有设备的分发配置文件。
严重地?我们无法选择配置文件?我相信约塞连还活着。

s
shim

我遇到了同样的问题,使用命令行“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'

这对我有用!使用 xcodebuild 的其他答案没有 -exportProvisioningProfile 开关。
请注意,如果您的应用程序使用任何扩展、嵌入式框架或库,这将无法正常工作。
这对我有帮助。谢谢!因此,Apple 更新了 XCode 以生成糟糕的 XC Prov 配置文件,但忘记了 XCodeBuild。这次我们只是走运了。哦!苹果是如何让我们受苦的!
我将此设置为已接受的答案。答案可能不适用于所有情况,但经过某些修改,xcodebuild 可以用来解决这个问题(这就是我们在 CI 服务器上所做的)。
我希望我早在 3 小时前就知道 xcodebuild 现在也可以导出为 ipa 格式了!我浪费了很多时间试图让 xcrun 嵌入给定的配置文件,但它在 Xcode 6 上不起作用。xcodebuild 可以!谢谢你。
G
GingerBreadMane

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

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

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


嗨,有关于这个变化的官方声明吗?
从来没听说过。我尝试在文本编辑器中比较新旧配置文件,看看我是否可以发现格式的变化,但我没有发现任何重要的东西
我很怀疑,但这对我有用。我刚刚切换到 Xcode 6 并尝试输出我的第一个临时构建
到目前为止,我使用的是开发配置文件。这仍然可用还是我需要创建分发配置文件?
是的 Legoless,您需要创建一个分发配置文件来导出构建。当您的设备连接到 Mac 时,您仍然可以使用开发配置文件进行调试。
S
Sarah Elan

进入管理器后

选择临时构建并单击“导出...”

选择“为临时部署保存”-> 下一步

不要从下拉列表中选择组织,而是选择“使用本地签名资产”-> 选择

像以前一样导出并保存 .ipa。

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


由于这个答案和this answer解决了这个问题。供应配置文件需要链接到一个显式应用程序 ID,它使用与您的应用程序相同的包标识符。通配符 App ID 将不起作用。然后,您需要在导出应用程序时选择“使用本地签名资产”。
@SarahElan 结合两个答案并写一个新答案...谢谢
在我看来,根据我的经验,我认为这是最好的答案。谢谢。
T
Thorsten

似乎最后生成的配置文件现在赢了。所以你可以重新生成你想要的配置文件并下载它,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" 

和我的设置:

https://i.stack.imgur.com/kRbpL.png


有没有更简单的方法?
我认为这是因为 MacOS 10.0.仍处于测试阶段。
使用 XC Ad Hoc 配置文件的问题在于它们始终包含所有设备 - 取消了禁用某些设备的选项,而您可以使用手动配置文件执行此操作。
XC Ad Hoc 配置文件只是一个示例。您可以使用您喜欢的任何配置文件。
您应该从 -exportPath 的参数中删除“.ipa”扩展名,因为它已经由 xcodebuild 自动添加。
J
Jonathan del Strother

我也想不通 - 在提交到 AppStore 时被它咬了一下,它默认为通配符配置文件。

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


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

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

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


谢谢!这对我有用。我编辑了配置文件以包含所有设备,重新归档了应用程序,并且 viola,它使用了正确的配置文件。
就是这样,对我来说这听起来像是一个错误,或者现在 Apple 引入了 TestFlight 来分发测试版,AdHoc 分发没有得到适当的关注。发生在我身上的事情正是@AlexHsieh 所描述的;我像以前一样创建了我的配置文件,只选择了我所有注册设备的一个子集,当我尝试生成 IPA 时,Xcode 找不到任何有效的配置文件并尝试使用这个自动生成的 XC 配置文件(其中在我的情况下也失败了)。解决方法是将我所有注册的设备添加到配置文件中。
u
user3382891

这对我有用:

单击“..选择开发团队..”对话框中的“查看帐户..”。单击“查看详细信息..”并找到 XC Ad Hoc 配置文件。右键单击该配置文件并选择“在 Finder 中显示”。删除选定的配置文件。返回步骤 1 中的对话框。单击“选择”。单击配置文件附近的箭头以打开配置文件目录。再次删除第 4 步中的通用配置文件。单击“将 [应用程序名称] 发送到 Apple:”对话框中的“上一个”按钮。再次选择“Save for Ad Hoc Deployment”再次单击“选择”按钮。

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


第一个我没试过。但这对我有用。谢谢。 =]
没有为我工作。即使在第 4 步和第 8 步中删除了配置文件,配置文件也会在第 11 步中重新创建并再次自动选择。
对我不起作用,因为每次我必须单击选择一个帐户(我有多个帐户用于向我的客户提供应用程序)时,都会重新创建 XC 生成的配置文件。苹果皮塔饼。
我要补充一点,在使用 XCode 6 执行这些步骤之前,您应该从您的 Apple 开发人员帐户中删除 XC:* 配置文件。在第 4 步之后,我将返回查看详细信息对话框并点击刷新按钮以确保那些 XC:* 配置文件不再存在。此外,使用 Thorsten 的构建设置来确保您选择了正确的配置文件。为我工作了两次。
我和@Chun 和 (@)wuf810 有同样的问题。那些该死的 .mobileprovisions 不断被重新创建。我所做的是保持“Provisioning Profiles”目录窗口打开,并继续执行从 (@)user3382891 开始的步骤 - 在重新创建 .mobileprovision 记录时尽快删除它们。最终 Xcode 选择了我正确的配置文件。现在我进入下一个问题......
A
Adam Freeman

我有一个适合我的解决方法。

我同时安装了 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。
如果您使用相同的配置文件进行构建和分发,那么您应该能够通过这种方式上传您的构建以测试飞行。仔细检查您用于构建的配置文件是否与您用于分发的配置文件相同。
D
Durga Vundavalli

https://i.stack.imgur.com/LBKzW.png


S
Sergiy Seletskyy

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

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

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

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

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

在 Xcode -> 管理器中

选择临时构建并单击“导出...”选择“保存临时部署”-> 下一步

从下拉列表中选择一个组织

检查是否自动选择了新的临时配置文件

像以前一样导出并保存 .ipa。


S
Sarah Elan

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

当您生成配置文件时,它需要链接到使用与您的应用程序相同的捆绑标识符的显式应用程序 ID。通配符 App ID 将不起作用。

当您导出应用程序以进行临时部署时,请在下拉列表中选择使用本地签名资产,然后单击选择。

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


c
cdescours

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

然后,您可以选择可用于测试应用程序的设备,就像使用开发人员配置文件一样。

当您以通常的方式从 Organizer 导出包裹时,新创建的证书将可用。

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

https://i.stack.imgur.com/BJLL1.png


是的,但正如您所指出的,这仅意味着 iOS8。苹果一直特别愚蠢地强迫 Testflight 用户只使用 iOS8。很长一段时间内,最大的安装基础仍然是 iOS7,所以苹果应该允许这样做。
d
diegomen

had the same problem, finally I solved it regenerating the profile that I wanted to use in Xcode 6 including all the devices that I have registered on my iOS Dev account, doing it that way, when selecting export it shows the correct profile and I可以在不使用脚本的情况下使用 Xcode 6 进行 Ad Hoc 导出。希望能帮助到你。


这有效,但前提是您对包含在您的 iOS 开发帐户注册的 所有 设备的配置文件感到满意。要仅使用配置文件中的一部分设备,我必须使用以下技术:stackoverflow.com/a/26296138/71262
M
M.Othman

我已经为此困扰了一段时间,但使用 Crashlytics 解决了它,使用 Xcode 项目的构建设置中的选定配置文件构建分布式。

希望它可以帮助某人。


s
sejersbol

几乎同样的问题。创建用于分发的存档(产品 > 存档)后,您导出存档(单击导出...)并选择“保存以供企业部署”;然后“下一步”。然后您选择“开发团队”默认值(例如组织名称)并单击“选择”。最后,您将看到一个摘要视图,其中还列出了 Xcode 自动为您找到(可能是即时创建)的配置文件。这可能是错误的配置文件(通常是通配符配置文件,例如“XC: *”)并且可能会发生,因为开发人员门户上已经有一个通配符配置文件。通配符配置文件可能会被其他旧项目使用,并且从开发人员门户中删除通配符配置文件可能是不明智的。

我为此使用了支持票,但只得到了这个链接 https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/ConfiguringPushNotifications/ConfiguringPushNotifications.html#//apple_ref/doc/uid/TP40012582-CH32-SW1。帮助不大。

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


C
Community

在 xcode 7 中,我无法通过

Organizer -> 上传到 App Store & Organizer -> 验证

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

编辑:

在为临时导出到应用商店以进行 testFlight 后上传应用会导致讨论的另一个问题 here。因此,解决这两个问题是其中之一。 创建 AppStore 配置,以便能够通过管理器选择它并通过上传到应用商店来使用 testFlight。


V
Victor Choy

我认为这是在 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>

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

但是你可能会在上面遇到另一个错误。

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

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

xcbuild-safe.sh xxxxNormalOptionsInXcodebuild bla...

稍等片刻,又一个奇怪的错误来了。

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

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

function shell_session_update() { :; }

c
clarkcox3

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


例如,具有可用于该应用程序的特定 UDID 列表。我正在为多个客户开发应用程序,我不能把它们混在一起。当然,有一些方法可以解决这个问题,但所有这些方法都比简单地选择我想使用的配置文件复杂得多
肯定有一种方法可以选择要使用的配置文件。 stackoverflow.com/a/26296138/71262
@Lope如果客户安装了您的一个应用程序和相关配置文件,他们可以安装您的任何应用程序(即使其他应用程序的配置文件不包含他们的设备)。这种混乱是我们希望开发人员远离手动指定他们的配置文件和设备列表的主要原因之一。 (即许多人似乎依赖一种错误的安全感作为他们想要手动指定配置文件的主要原因)
@clarkcox3 更糟糕的是,我想让客户无法看到彼此的应用程序
@Lope:我不知道有一种方法可以分发临时 ipa 文件,从而使您的所有应用程序都可供测试人员使用。换句话说,您必须明确向测试人员提供您希望他们测试的应用程序,对吗?这种物理分离会阻止他们使用任何其他应用程序。 (这不像他们可以去商店并获得所有这些,是吗?)是否有另一种方法可以让您的测试人员在未经您许可的情况下访问您的所有应用程序???