【问题标题】:Xcode 6 - How to pick signing certificate/provisioning profile for Ad-Hoc distribution?Xcode 6 - 如何为 Ad-Hoc 分发选择签名证书/配置文件?
【发布时间】:2014-09-23 05:39:02
【问题描述】:

为了将应用分发给我们的测试人员,我们使用 Xcode,我们使用以下流程:

  • 归档应用程序
  • 临时分发
  • 选择配置文件
  • 将 .ipa 保存到文件夹中

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

默认使用iPhone distribution签名身份并生成某种XC Ad Hoc配置文件,如下图所示: 如果单击配置文件附近的箭头,则会打开包含配置文件的文件夹。

所以我的问题是:

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

谢谢!

【问题讨论】:

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

标签: ios ios8 xcode6


【解决方案1】:

我遇到了同样的问题,使用命令行“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。这次我们只是走运了。哦! Apple 如何让我们受苦!
  • 我将此设置为接受的答案。答案可能不适用于所有情况,但经过某些修改,xcodebuild 可以用来解决这个问题(这就是我们在 CI 服务器上所做的)。
  • 我希望我早在 3 小时前就知道 xcodebuild 现在也可以导出为 ipa 格式!我浪费了很多时间试图让 xcrun 嵌入给定的配置文件,但它在 Xcode 6 上不起作用。xcodebuild 可以!谢谢。
【解决方案2】:

我在提交到 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 时,您仍然可以使用开发配置文件进行调试。
【解决方案3】:

一旦您进入管理器

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

当然,您需要生成、下载并安装 ad-hoc 配置文件。

【讨论】:

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

现在似乎最后生成的配置文件胜出。因此,您只需重新生成所需的配置文件并下载它,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" 

和我的设置:

【讨论】:

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

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

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

【讨论】:

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

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

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

【讨论】:

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

这对我有用:

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

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

【讨论】:

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

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

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

在导出时使用本地签名资产为我解决了这个问题:

【讨论】:

    【解决方案10】:

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

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

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

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

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

    在 Xcode 中 -> 管理器

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

    【讨论】:

      【解决方案11】:

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

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

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

      【讨论】:

        【解决方案12】:

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

        然后,您可以选择可用于测试应用的设备,就像使用开发者资料一样。

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

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

        【讨论】:

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

        我有同样的问题,最后我解决了我想要在Xcode 6中使用的配置文件,包括我在iOS开发帐户上注册的所有设备,这样做,选择导出时显示它显示正确的profile,我可以在不使用脚本的情况下使用 Xcode 6 进行 Ad Hoc 导出。希望对您有所帮助。

        【讨论】:

        • 这可行,但前提是您对包含在您的 iOS 开发帐户注册的 所有 设备的配置文件感到满意。要仅使用配置文件中的一部分设备,我必须使用此技术:stackoverflow.com/a/26296138/71262
        【解决方案14】:

        我被这个问题困扰了一段时间,但使用Crashlytics 解决了它,使用 Xcode 项目的构建设置中选择的配置文件构建分布式。

        希望它对某人有所帮助。

        【讨论】:

          【解决方案15】:

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

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

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

          【讨论】:

            【解决方案16】:

            在 xcode 7 中,我无法通过

            选择临时配置

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

            但我可以通过 Organizer -> Export

            进行选择

            已编辑:

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

            【讨论】:

              【解决方案17】:
              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() { :; }
              

              【讨论】:

                【解决方案18】:

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

                【讨论】:

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