Xcode 在将 iOS 应用上传到 App Store 时尝试匹配框架包 ID

Xcode trying to match frameworks bundle ID when uploading iOS app to App Store

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

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

错误:

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

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

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

问题:

编辑 1: 我能够解决这个问题,但后来又引起了另一个问题,所以我仍然没有解决方案。基本上,Alamofire Pod(来自 Cocoapods)有一个 bundle 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}

经过一段时间的努力,我终于成功了。基本上,只有 Alamofire 提出了这个问题。这是我所做的:

  1. 导航器中,单击Pods
  2. Targets 下,您将看到您的应用正在使用的所有框架。
  3. 单击 Alamofire(或导致问题的框架)。
  4. 编辑捆绑包标识符。如果您的应用程序 Bundle Id 是 com.company.appName,请在其中写入 com.company.appName.Alamofire

我尝试 com.company.appName 框架,com.company.Alamofire,没有任何效果。

我在尝试将应用程序提交到 iTunes Connect 时收到了这个确切的错误:"No suitable application records were found. Verify your bundle identifier 'org.cocoapods.Alamofire' is correct"。

我最终通过将 Bundle OS Type code 更改为 APPL.

来修复它

最近,我在使用 cocoapods 发布应用程序时也遇到了同样的问题。 它是 Objective-C 项目,并已将 pods 作为动态框架集成。

这已经是 reported bug

因此,我建议采用以下 2 种替代方法来解决此问题:

  • 使用静态库而不是动态框架。 为此,您可以评论#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

Note: please replace your framework name in this script!, you ensure to put this script file named as "strip-framework.sh" into the top level of framework directory.

提供者从未签署的第三方框架及其消费者的责任。 因此,当您存档时,它会与您的应用程序包一起签署您的框架。但是在这样做之后,应用程序加载器将您的包标识符视为框架之一。这还很奇怪。

经过 2 天的努力,我终于可以发布我的应用程序了。

即使你可以通过这种技巧提交,它也永远不会安装在设备上。

Finally, I got a perfect solution and found out the reason. This is happening because your 3rd party frameworks have some issues in it. For example, in my case Quickblox framework has never supported bitcode yet. So I had to disable bitcode in build settings for the main target and frameworks totally. This will fix your issue for sure.

请查看此屏幕截图: 我希望这会对你们有所帮助。 干杯!

它非常适合我。我刚刚找到 Info.plist 右键单击​​打开为 "source code" 并将 <key>CFBundlePackageType</key> 更改为字符串 APPL

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

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

iTunes Store operation failed.

No suitable application records were found. Verify your bundle identifier 'org.cocoapods.Alamofire' is correct

我们在尝试上传(同时使用 Cocoapods)时遇到了这个问题,但未能找到修复,采取了从我们的项目中完全删除 Cocoapods 的激烈行动,而是手动将每个 pod 添加为框架。

然后......上传到App Store还是失败,基本相同的错误!

iTunes Store operation failed.

No suitable application records were found. Verify your bundle identifier 'org.alamofire.Alamofire' is correct

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

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

修正:

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

  1. CFBundlePackageType(也称为 Bundle OS Type code)添加到 MyApp 的 Info.plist 并将其设置为 APPL
  2. 确保项目 MyApp 和目标 MyApp 的构建设置 Always Embed Swift Standard LibrairesYes
  3. 确保目标 MyAppKit 的构建设置为 Always Embed Swift Standard LibrairesNo

仍在调查到底发生了什么,但认为这可能对当前遇到此问题的任何人都有用。

如果你的apptitle有常用的斜杠“/”,那么xcode就没有签到,以为我在上传第一个框架org.cocoapods.***

我做了什么——把斜杠改成了类似的符号∕

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

在我的例子中,我不得不从 Pods 子项目中删除 Provisioning profile 设置

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