菜单

iOS版SDK常见编译及上架问题

iOS版SDK常见编译及上架问题

1. 编译报错

1.1 Xcode版本异常

由于Apple的要求,2023年4月25日起上架的应用需要使用Xcode14.1或以上编译打包。AnyThinkiOS从6.1.74版本起使用Xcode14.1打包,开发者需要使用Xcode14.1或以上版本才能够编译通过,所以请检查你们的Xcode是否符合要求。

1.2 SDK Framework库异常

由于iOS依赖库Framework文件在windows下解压可能出现文件损坏问题,故请避免在windows下解压SDK压缩包,如损坏,请确保SDK库文件及Xcode依赖全部删除,并参照SDK集成说明文档重新引入。

1.3 应用程序编译报错(App Not Compiles)

如果您的项目编译报错,并且Xcode发出这样的一些错误信息: "Undefined symbols for architecture..." 或是 "ld: symbol(s) not found for architecture...":

您的项目中缺少了一些modules,请使用Xcode中列出的错误信息找到缺失的modules,并将其添加到您的项目中就可以解决问题:

在Xcode列出的日志中,您可能会发现这样的消息"some_symbols", referenced from:, 用 "some_symbols" 去找到您缺失的 modules。这里举一个例1:

这里的未定义符号 _res_9_ninit_res_9_ndestroy, 使用 Google 或者 Baidu 搜索,您会发现这两个符号是在 libresolv.9.tbd 中定义的。所以解决这个问题,只需要将libresolv.9.tbd添加到您的项目中:

1) 导航到 Build Phases, 点击 Link Binary With Libraries:

2) 点击 + 按钮, 搜索resolv, 点击 libresolv.9.tbd, 然后点击Add按钮添加 libresolv.9.tbd lib 到您的项目中:

例2.

搜索之后发现缺失的symbol是在 libxml2.tbd中被定义的(例如_xmlStrlen_xmlBufferLength)使用上述的方法把它添加到您的项目即可解决。

例3.

搜索之后发现缺少的symbol是在 VideoToolbox.framework中被定义的,使用上述的方法把它添加到您的项目即可解决。

例4. 工程编译报错:“___isPlatformVersionAtLeast”, referenced from: 如下:

如果您遇到了这种错误,是因为Xcode版本过低,只需要更新到Xcode 11以上即可。

1.4 Masonry相关编译报错

pod 'Masonry'之后报下图错误:

解决方案:提升Pod下Masonry最低支持的iOS版本,或者添加以下代码至podfile中

  post_install do |installer|
    installer.generated_projects.each do |project|
      project.targets.each do |target|
          target.build_configurations.each do |config|
              config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
           end
      end
    end
  end

添加上述代码的位置参考下图:

2. 集成后出现崩溃问题

2.1 启动时崩溃(App Crashes on Launching)

应用程序在启动时崩溃时因为您缺少了某些配置,我们这里给出几个例子:

2.2 在Build Settings中的Other Linker Flags缺失-ObjC flag配置项

如果你遇到了这种错误,您可以在Xcode导航到Build Settings中,找到Other Linker Flags 双击它,点击+并添加-ObjC即可:

: Linker Flags 是需要区分大小写的

2.3 引入Admob的SDK后,程序启动崩溃

您遇到这个崩溃时因为您添加了Admob的SDK,但是没有在Info.plist中配置AppID:

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-9488501426181082~7319780494</string>
<key>GADIsAdManagerApp</key>
<true/>

如下图:

注: 如果您的应用程序导入了Admob的SDK,请保证您的app配置了以上操作。

2.4 引入快手SDK编译崩溃

您遇到这个崩溃是因为快手SDK为动态库,需要将KSAdSDK.frameworkEmbed修改为Embed&Sign即可

在修改完Embed之后,若是编译还是报错,如下:

文章图片

解决方法:修改Xcode --> Targets --> Build Settings --> Runpath Search Paths,点击添加@executable_path/Frameworks,同时注意保证将KSAdSDK.framework导入到工程主target。如图所示:

文章图片

2.5 展示广点通激励视频或者插屏广告时崩溃

AppDelegate.h中添加window属性即可


2.6 找不到SDK符号,编译失败

检查pod安装时是否有以下类似警告:

[!] The `xxx` target overrides the `OTHER_LDFLAGS` build setting defined in `../Pods/Target Support Files/Pods-xxx/Pods-xxx.debug.xcconfig'. This can lead to problems with the CocoaPods installation

   - Use the `$(inherited)` flag, or

   - Remove the build settings from the target.

按照这里的提示 , 使用  Use the `$(inherited)` flag 这个方案,把警告都解除一下, 即可解决问题。


3. 上架App Store异常

3.1 App打包提交App Store时失败

如果您的应用程序导入了快手的SDK,在打包提交App Store时报错:

这是因为苹果提审只接受arm的,不支持x86那些,快手SDK中包含了x86。解决如下:
Build Phase -> New Run Scrip Phase

添加new Run Script Phase之后,会出现Run Script,然后在里面添加一段脚本代码,如下:

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
    FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
    FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
    echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"

    EXTRACTED_ARCHS=()

    for ARCH in $ARCHS
    do
        echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
        lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
        EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
    done

    echo "Merging extracted architectures: ${ARCHS}"
    lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
    rm "${EXTRACTED_ARCHS[@]}"

    echo "Replacing original executable with thinned version"
    rm "$FRAMEWORK_EXECUTABLE_PATH"
    mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"

done

添加完脚本代码块后,勾选上Run script only when installing,重新打包提交即可。
如下图:

上一个
常见问题排查指引
下一个
iOS版SDK无填充或加载失败指引
最近修改: 2025-05-30Powered by