24

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

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

在此处输入图像描述

错误:

在此处输入图像描述

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

错误消息表明它正在尝试Bundle ID根据框架的名称匹配 a,而不是我自己的包(例如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

在此处输入图像描述

所有代码设计设置为自动

问题:

  • 我做的步骤正确吗?
  • 为什么Xcode要匹配 aframework's bundle id而不仅仅是我的主应用程序?
  • 我怎样才能克服这个问题最终提交我的应用程序?

编辑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}
4

8 回答 8

6

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

我最终通过将Bundle OS Type 代码更改为APPL来修复它。

于 2016-08-30T20:38:07.900 回答
6

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

<key>CFBundlePackageType</key>
<string>APPL</string>
于 2016-10-14T21:54:53.053 回答
5

经过一段时间的努力,我能够让它工作。基本上,只有 Alamofire 提出了这个问题。这是我所做的:

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

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

于 2016-04-22T21:48:12.593 回答
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. CFBundlePackageType(也称为Bundle OS Type code)添加到 MyAppInfo.plist并将其设置为APPL.
  2. 确保项目 MyApp 和目标 MyApp 的构建设置Always Embed Swift Standard LibrairesYes.
  3. 确保目标 MyAppKit 的构建设置Always Embed Swift Standard LibrairesNo.

仍在调查这里到底发生了什么,但认为这可能对目前正在经历这种情况的任何人有用。

于 2016-11-11T15:00:27.280 回答
1

最近,当我使用 cocoapods 发布应用程序时,我也遇到了同样的问题。这是一个 Objective-C 项目,并且一直将 pod 集成为动态框架。

这是已经报告的错误

因此,我建议使用以下 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

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

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

经过两天的工作,我终于可以发布我的应用程序了。

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

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

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

于 2016-09-29T15:04:06.983 回答
0

如果你的 apptitle 有通常的斜线“/”,那么 xcode 没有签名,并认为我正在上传第一个框架 org.cocoapods。***

我所做的 - 将斜杠更改为类似的符号∕</p>

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

于 2017-02-08T13:48:32.300 回答
0

在我的情况下,我必须从 Pods 子项目中删除 Provisioning 配置文件设置 在此处输入图像描述

于 2017-03-29T20:47:00.840 回答
0

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

于 2020-03-16T08:05:24.607 回答