在将iOS应用程序上传到App Store时,Xcode尝试匹配框架捆绑ID

时间:2016-04-09 00:27:32

标签: ios swift xcode cocoapods bundle-identifier

开发我的第一个iOS应用程序4个月后,是时候将其提交到App Store了。我在iTunes Connect中创建了应用,填写了所有详细信息,并在Bundle IDConnect中设置了正确的Xcode。但是,过去3天我一直在努力解决这个奇怪的问题。似乎xcode正在尝试上传Cocoapods框架,而不是我的主应用程序。

归档后,我去了Window > Organizer > Validate...。我看到以下屏幕:

enter image description here

错误:

enter image description here

(对于googlers:未找到合适的应用程序记录。请验证您的包标识符“org.cocoapods.Alamofire”是否正确。)

错误消息表明它正在尝试根据框架的名称匹配Bundle ID,而不是我自己的捆绑(例如com.organization.AppName)。我无法在任何地方找到答案。我尝试在我的Podfile(有use_frameworks!)中执行以下操作,以及我的不同配置组合,但没有成功。

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|

      config.build_settings['EXPANDED_CODE_SIGN_IDENTITY'] = ""
      config.build_settings['CODE_SIGNING_REQUIRED'] = "NO"
      config.build_settings['CODE_SIGNING_ALLOWED'] = "NO"
    end
  end
end

enter image description here

All codesigning set to automatic

问题:

  • 我正在采取的步骤是正确的吗?
  • 为什么Xcode尝试匹配framework's bundle id而不仅仅是我的主应用程序?
  • 如何通过此问题最终提交我的应用程序?

编辑1:我能够解决这个问题,但后来又引发了另一个问题,所以我仍然没有解决方案。基本上,Alamofire Pod(来自Cocoapods)有一个包ID com.xxx.Alamofire。我将其更改为com.xxx.myAppName。有了这个,我能够将它发送到App Store,但由于以下错误,我无法从TestFlight在我的iPhone中安装该应用程序:

4/22/16, 12:50:29 AM itunesstored[124]: [ApplicationWorkspace]: Failed to install application: com.xxx.myAppName; /var/mobile/Media/Downloads/5927832272594571027/-6969961974973998640; Error Domain=LaunchServicesError Code=0 "(null)" UserInfo={Error=DuplicateIdentifier, ErrorDescription=The parent bundle has the same identifier (com.xxx.myAppName) as sub-bundle at /private/var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.IVHCuO/extracted/Payload/MyApp.app/Frameworks/Alamofire.framework}

8 个答案:

答案 0 :(得分:5)

经过一段时间的努力,我才能让它发挥作用。基本上,只有Alamofire提出这个问题。这是我做的:

  1. 导航器中,点击广告
  2. 目标下,您会看到您的应用正在使用的所有框架。
  3. 点击 Alamofire (或导致问题的框架)。
  4. 修改捆绑标识符。如果您的应用套件ID为com.company.appName,请在其中填写com.company.appName.Alamofire
  5. 我为框架com.company.appName尝试了com.company.Alamofire,没有任何效果。

答案 1 :(得分:5)

我在尝试将应用程序提交到iTunes Connect时收到了这个确切错误:“找不到合适的应用程序记录。验证您的包标识符'org.cocoapods.Alamofire'是否正确”。

我最后通过将捆绑操作系统类型代码更改为 APPL 来解决此问题。

答案 2 :(得分:5)

它对我来说非常合适。我刚刚找到Info.plist右键单击打开为“源代码”,我将<key>CFBundlePackageType</key>更改为字符串APPL

<key>CFBundlePackageType</key>
<string>APPL</string>

答案 3 :(得分:4)

刚刚遇到此问题时,尝试上传到App Store时显示以下错误。

  

iTunes Store操作失败。

     

未找到合适的申请记录。验证您的捆绑包标识符'org。 cocoapods .Alamofire'是否正确

我们在尝试上传(使用Cocoapods)并且未能找到修复程序时遇到了这种情况,采取了完全从我们的项目中删除Cocoapods的激烈操作,而是手动将每个pod添加为框架。

而且......上传到App Store仍然失败,基本相同的错误!

  

iTunes Store操作失败。

     

未找到合适的申请记录。验证您的包标识符'org。 alamofire .Alamofire'是否正确

所以这看起来可能是与Xcode本身的框架使用有关的错误。

发现这不一定是由Cocoapods造成的,我们决定继续使用Cocoapods并提出以下步骤来解决这个问题。

修复:

我们的项目包含2个目标(忽略单元测试目标等)。 1为应用程序(让我们称之为 MyApp ),另一个包含网络层和其他非应用程序特定功能(让我们称之为 MyAppKit )。

  1. Bundle OS Type code(也称为Info.plist)添加到MyApp的APPL并将其设置为Always Embed Swift Standard Libraires
  2. 确保项目MyApp和目标MyApp都具有构建设置YesAlways Embed Swift Standard Libraires
  3. 确保目标MyAppKit的构建设置No为{{1}}。
  4. 仍在仔细研究这里发生了什么,但认为这可能对目前正在经历这种情况的人有用。

答案 4 :(得分:1)

最近,当我使用cocoapods发布应用程序时,我也遇到了同样的问题。 这是Objective-C项目,并将pods作为动态框架进行整合。

这已经是reported bug

因此,我建议遵循以下两种方法来解决此问题:

  • 使用静态库而不是动态框架。 为此,您可以评论#use_frameworks!您的pod文件中的行。

  • 如果您需要使用框架,可以尝试以下步骤:

    1. 在Xcode目标中将您的框架添加为嵌入式二进制文件。

    2. 在目标的构建阶段,添加一个运行脚本:

示例脚本:

# Stripping framework only for archive
if [ "$ACTION" = "install" ]; then

    FRAMEWORK_NAME="Framework name"
    SCRIPT_FILE_NAME="strip-framework.sh"

    # Set working directory to product’s embedded frameworks
    cd  "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/${FRAMEWORK_NAME}.framework"

    # Get architectures for current file
    ARCHS="$(lipo -info "${FRAMEWORK_NAME}" | rev | cut -d ':' -f1 | rev)"
    for ARCH in $ARCHS; do
        if ! [[ "${VALID_ARCHS}" == *"$ARCH"* ]]; then
        # Strip non-valid architectures in-place
        lipo -remove "$ARCH" -output "$FRAMEWORK_NAME" "$FRAMEWORK_NAME" || exit 1
        fi
    done

    echo "Framework was successfully stripped with unsupported architectures"

fi

# Removing script from framework folder
if [ -f ${SCRIPT_FILE_NAME} ]; then
    rm -rf "${SCRIPT_FILE_NAME}"
fi
  

注意:请在此脚本中替换您的框架名称!,确保将名为“strip-framework.sh”的脚本文件放入框架目录的顶层。

第三方框架从未由提供商签署,也没有消费者的责任。 因此,当您归档时,它会与您的应用程序包一起签署您的框架。但在这之后,Application loader会将您的bundle标识符视为框架之一。它奇怪的是。

在工作2天后,我可以最终发布我的应用程序。

即使您可以通过这样棘手的方式提交,它也永远不会安装在设备上。

  

最后,我得到了一个完美的解决方案并找出原因。这是   因为您的第三方框架存在一些问题而发生。   例如,在我的情况下,Quickblox框架从未支持过   bitcode呢。所以我不得不在构建设置中禁用bitcode   主要目标和框架完全。这肯定会解决您的问题。

请查看此截图: Disable Bitcode 我希望这能帮到你们。 干杯!

答案 5 :(得分:0)

如果您的apptitle有通常的斜杠&#34; /&#34;,则xcode无法签名,并认为我上传了第一个框架org.cocoapods。***

我做了什么 - 将斜线改为类似的符号/

(第一个斜杠,下一个 - 其他unicode符号://)

答案 6 :(得分:0)

在我的情况下,我不得不从Pods子项目中删除Provisioning profile设置 enter image description here

答案 7 :(得分:0)

首先,请检查您的捆绑包标识符。接下来,请确保您的应用是在应用内商店连接中创建的,这可能是无法将应用上传到商店的原因之一。