本页目录

安装与分包

适用于 SDK 6.5.1。接入概览 · 指南目录

环境要求

  • 使用 macOS 与 Xcode,App 最低部署目标为 iOS 11.0。SwiftPM 清单要求 Swift tools 5.9,使用 Xcode 15 或更新版本;本版构建验证工具为 Xcode 26.2。部署目标声明不代表每个 iOS 版本均已真机验证。
  • CocoaPods 方式先安装可运行的 CocoaPods(终端执行 pod --version 检查);运行手动示例另需 Python 3(python3 --version)。
  • 选择 CocoaPods、SwiftPM、手动集成中的一种。升级或更换方式前移除旧 SDK 引用和重复资源,保留其他业务依赖。
  • 接入前向平台取得与 App、渠道及广告形式匹配的广告位;下载和编译不要求广告填充,实际加载与展示需要有效广告位及网络。

CocoaPods

在终端进入自己 App 的 .xcodeproj 所在目录;已有 Podfile 时编辑原文件,没有时先执行 pod init。将 YourApp 替换为实际 App target 名,不是 Bundle Identifier;保留项目其他依赖:

source 'https://cdn.cocoapods.org/'
platform :ios, '11.0'

target 'YourApp' do
  use_frameworks!
  pod 'IFLYADLib', '6.5.1'
end

在 Podfile 所在目录执行:

pod install
open YourApp.xcworkspace

CocoaPods 从官方 trunk 获取清单,从 TOS 下载二进制,自动配置资源、隐私清单、-ObjC 与系统依赖。后续打开 .xcworkspace,不要只打开 .xcodeproj。检查 Podfile.lock 中 IFLYADLib 为 6.5.1,并将锁文件纳入自己的版本管理。无需另从 GitHub 或 TOS 手动复制 bundle。

若本地源找不到版本,执行 pod install --repo-update。若提示锁文件与明确指定的新版本冲突,执行 pod update IFLYADLib --repo-update 并检查锁文件差异,不使用不带名称的全量 pod update 来处理单个 SDK 升级。

按广告形式安装

裸 IFLYADLib 等价于 IFLYADLib/Full,包含五种广告。仅需部分形式时,将上面的 pod 行替换为所需 subspec;不要同时保留 Full:

# 只需要开屏:自动带入 Core、VideoUI 和资源
pod 'IFLYADLib/Splash', '6.5.1'
# Banner 与自渲染信息流组合:共用一份 Core
pod 'IFLYADLib/Banner', '6.5.1'
pod 'IFLYADLib/NativeFeed', '6.5.1'

还可选择 Interstitial、Reward;Core 只提供公共配置,不含广告入口。修改后重新 pod install。各格式的模块和资源依赖见下方手动接入表;CocoaPods 会自动处理这些依赖。

Swift Package Manager

  1. 在 Xcode 打开自己的 App 工程,选择 File → Add Package Dependencies…,输入包地址:https://github.com/LJMcarryu/IFLYADLib_iOS.git。
  2. 在 Dependency Rule 选择 Exact Version,填写 6.5.1,确认 Add to Project 为自己的工程,再点 Add Package。不要选 main 分支作为 SDK 版本。
  3. 在 Product 选择页勾选 Full,Add to Target 选择实际 App target。等待包解析、二进制下载完成;资源与隐私清单由资源 target 自动投递,不要再手工添加 bundle。
  4. 在 App target 的 Other Linker Flags 保留 $(inherited) -ObjC;链接 AdSupport.framework,将 AppTrackingTransparency.framework 设为 Optional。
  5. 在工程 Package Dependencies 确认版本为 6.5.1;保留 Package.resolved。按下方模块名导入并编译。下载失败先核对 GitHub 与 TOS 的可达性;确认网络恢复后通过 File → Packages → Resolve Package Versions 重试。

只需部分形式时,第 3 步改选 Banner、Splash、Interstitial、NativeFeed、Reward 中所需的 Product,依赖会自动带入。Full 是安装 Product,不是代码中的模块名;不要写 import Full 代替 SDK 导入。

下载与手动集成

下面用于把 SDK 接入自己的 App。若只想运行现成示例,直接按 手动示例 README 下载工程并运行准备脚本,工程已经配置了资源和链接参数。

下载哪些文件

下载文件来源与用途
IFLYADLib-modelA-6.5.1.zipTOS 同版完整二进制包
checksums.txt上述包的 SHA-256,读取 Combined 行的 sha256= 值
IFLYADLib-resources-6.5.1.zipTOS 同版手动资源补充包,含三个成品 bundle 和独立隐私清单
IFLYADLib-resources-6.5.1.sha256资源补充包的标准 SHA-256 校验文件

可左右滚动查看完整表格

6.5.1 手动安装需同时下载二进制包和资源补充包。 本版原完整包中的 resources/Core、resources/VideoUI、resources/Reward 是散资源目录,不是可直接拖入的成品 bundle。补充包来自同版资源,内容与 GitHub 6.5.1 Tag 一致;无需再到 GitHub 下载才能完成安装。

下载、校验与解压

在一个新的工作目录打开终端,依次执行以下命令。checksums.txt 是发布清单格式,不直接传给 shasum -c;下例提取目标文件生成标准校验行。校验必须输出 IFLYADLib-modelA-6.5.1.zip: OK,不一致时停止并重新下载,不能继续使用该文件。

mkdir -p IFLYADLib-6.5.1-manual
cd IFLYADLib-6.5.1-manual
curl --fail --location --output IFLYADLib-modelA-6.5.1.zip \
  https://download-adsdk.voiceads.cn/ios_sdk/6.5.1/general/IFLYADLib-modelA-6.5.1.zip
curl --fail --location --output checksums.txt \
  https://download-adsdk.voiceads.cn/ios_sdk/6.5.1/general/checksums.txt
awk '$1 == "Combined" && $2 == "IFLYADLib-modelA-6.5.1.zip" {sub(/^sha256=/, "", $3); print $3 "  " $2}' \
  checksums.txt > binary.sha256
shasum -a 256 -c binary.sha256 && ditto -x -k IFLYADLib-modelA-6.5.1.zip SDK

继续在同一目录下载资源,校验成功后解压:

curl --fail --location --output IFLYADLib-resources-6.5.1.zip \
  https://download-adsdk.voiceads.cn/ios_sdk/6.5.1/general/IFLYADLib-resources-6.5.1.zip
curl --fail --location --output IFLYADLib-resources-6.5.1.sha256 \
  https://download-adsdk.voiceads.cn/ios_sdk/6.5.1/general/IFLYADLib-resources-6.5.1.sha256
shasum -a 256 -c IFLYADLib-resources-6.5.1.sha256 && \
  ditto -x -k IFLYADLib-resources-6.5.1.zip Resources

解压后的 SDK/ 根目录包含七个 XCFramework;Resources/ManualResources/ 包含三个 bundle 与 PrivacyInfo.xcprivacy。不要把 SDK/resources 的散文件再复制一次。

按格式选择二进制和资源

表中二进制均带 .xcframework 后缀,位于 SDK/;资源均位于 Resources/ManualResources/。多个格式的共享依赖只加入一次。

使用的格式必须链接的二进制必须复制的资源
BannerIFLYAdCore、IFLYAdBannerCore bundle、独立隐私清单
自渲染信息流IFLYAdCore、IFLYAdNativeFeedCore bundle、独立隐私清单
开屏IFLYAdCore、IFLYAdVideoUI、IFLYAdSplashCore、VideoUI bundle、独立隐私清单
插屏IFLYAdCore、IFLYAdVideoUI、IFLYAdInterstitialCore、VideoUI bundle、独立隐私清单
激励视频IFLYAdCore、IFLYAdVideoUI、IFLYAdRewardCore、VideoUI、Reward bundle、独立隐私清单
Full全部七个模块三个 bundle、独立隐私清单

可左右滚动查看完整表格

Core、VideoUI、Reward bundle 的完整名称分别为 IFLYADLibCoreResources.bundle、IFLYADLibVideoUIResources.bundle、IFLYADLibRewardResources.bundle。独立的 PrivacyInfo.xcprivacy 不在 Core bundle 内,必须另外加入 App target 的 Copy Bundle Resources。若 App 已有同名隐私清单,合并 SDK 声明到宿主清单、核对声明完整性,避免两个同名文件复制到同一输出路径。

加入自己的 Xcode 工程

  1. 在工程目录新建 Vendor/IFLYSDK/6.5.1/,放入上表要求的 XCFramework、完整 bundle 和隐私清单。保留文件名与 bundle 内部结构,不要引用“下载”目录中的临时文件。
  2. 在 Xcode 选择 File → Add Files to “YourApp”…,选中所需 .xcframework 根目录和资源。文件尚未位于工程目录时勾选 Copy items if needed(新版 Xcode 为 Copy files to destination),并勾选自己的 App target。不要选单个平台切片,也不要把整个下载目录拖入 target。
  3. 在 App target → General → Frameworks, Libraries, and Embedded Content 核对每个 XCFramework 只出现一次,全部设为 Do Not Embed。静态库参与链接,不使用 Embed & Sign。
  4. 在 App target → Build Phases → Copy Bundle Resources 加入上表所需资源。每个 .bundle 以完整包加入,不展开后逐个拖入图片;这里不能出现 XCFramework、ZIP、__MACOSX 或重复资源。framework 内部含资源不代表资源已经复制到 App。
  5. 在 Build Settings → Other Linker Flags 中,为 Debug 和 Release 保留 $(inherited) 并添加 -ObjC。在 Build Phases → Link Binary With Libraries 添加 AdSupport.framework,把 AppTrackingTransparency.framework 的 Status 设为 Optional。
  6. 按下文导入模块并编译。完成安装检查后,再按本渠道隐私与广告指南发起请求;仅添加 SDK 不会自动请求广告。

GitHub 资源备用入口

需要核对或改用 GitHub 获取同版资源时,打开 6.5.1 Tag,确认版本选择器为 6.5.1,点 Code → Download ZIP;也可直接下载 同版源码 ZIP。这是源码及资源包,不含所需发布二进制,XCFramework 仍使用上面的 TOS 下载。

解压 IFLYADLib_iOS-6.5.1/ 后,按需取得:

  • spm/Core/IFLYADLibCoreResources.bundle
  • spm/VideoUI/IFLYADLibVideoUIResources.bundle
  • spm/Reward/IFLYADLibRewardResources.bundle
  • spm/Core/Resources/PrivacyInfo.xcprivacy

以上路径与 TOS 补充包的同名资源一一对应,选择一套即可。GitHub 的单个 Raw 下载不能下载完整 bundle 目录。获取固定资源使用 Tag;运行最新示例使用 main 分支,具体见示例 README。

导入与共存

Objective-C 先导入 #import <IFLYAdCore/IFLYAdCore.h>,再导入所选广告头,例如 #import <IFLYAdBanner/IFLYBannerAd.h>。Swift 对应 import IFLYAdCore、import IFLYAdBanner;其余格式映射见模块迁移说明。无需添加旧版自定义头搜索路径。

通用版与优酷版导出相同 IFLY* 符号,不能同时链接。不要混用不同版本的模块和资源。

安装结果检查

  1. 在 Xcode 选择 App scheme 和已安装的 iOS Simulator,执行 Product → Build。应完成编译与链接,没有模块缺失、重复符号或重复资源输出错误。
  2. 手动集成时,在 Products 下找到自己的 .app,右键 Show in Finder,再 Show Package Contents。应看到 IFLYADLibCoreResources.bundle,视频格式另有 IFLYADLibVideoUIResources.bundle,激励另有 IFLYADLibRewardResources.bundle;App 根目录包含独立的 PrivacyInfo.xcprivacy。不要只检查下载 ZIP 中存在资源。
  3. CocoaPods/SwiftPM 的资源可能位于生成的资源 bundle 中;检查最终 App 内能找到 SDK 资源和隐私清单,不要求目录与手动方式完全相同。可把下方路径替换为实际构建得到的 .app 路径,在终端列出:
find "/绝对路径/YourApp.app" \( -name '*.bundle' -o -name 'PrivacyInfo.xcprivacy' \) -print
  1. 按隐私配置接入授权和请求前配置,再按广告指南验证加载、就绪、展示、失败与退出流程。编译通过不代表有广告填充、真机行为或上架审核通过。

安装失败排查

现象检查与处理
下载为 HTML、404 或校验失败使用本页同版直链,检查网络;重新下载并核对 SHA-256,不能跳过校验
CocoaPods 找不到版本或仍为旧版核对 Pod 名、精确版本、官方源和锁文件,按上文刷新源或定向更新
SwiftPM 找不到模块核对 Exact Version、Product 的 App target 归属和导入名;等待下载完成,再解析依赖
手动方式找不到模块或缺架构添加完整 XCFramework 根目录,移除失效的旧引用,不手选平台切片或复制旧头
duplicate symbols检查是否混装 Pods、SwiftPM、手动库,或同时链接多个渠道
Multiple commands produce / 资源重复检查 Copy Bundle Resources;同一 bundle 只保留一次,处理同名隐私清单冲突
能编译但资源缺失按上面的最终 .app 检查路径,保留 bundle 名称及目录,不把图片散拷到 App 根目录
广告未展示先区分安装错误与请求无填充;核对本渠道广告位、回调错误、Ready、页面和窗口状态

可左右滚动查看完整表格

反馈时附 SDK 版本、接入方式、Xcode/iOS 版本、所选模块及完整错误信息;日志先移除 token、设备标识和业务敏感参数。