安装与分包
环境要求
- 使用 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.xcworkspaceCocoaPods 从官方 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
- 在 Xcode 打开自己的 App 工程,选择 File → Add Package Dependencies…,输入包地址:
https://github.com/LJMcarryu/IFLYADLib_iOS.git。 - 在 Dependency Rule 选择 Exact Version,填写
6.5.1,确认 Add to Project 为自己的工程,再点 Add Package。不要选 main 分支作为 SDK 版本。 - 在 Product 选择页勾选 Full,Add to Target 选择实际 App target。等待包解析、二进制下载完成;资源与隐私清单由资源 target 自动投递,不要再手工添加 bundle。
- 在 App target 的 Other Linker Flags 保留
$(inherited) -ObjC;链接AdSupport.framework,将AppTrackingTransparency.framework设为 Optional。 - 在工程 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.zip | TOS 同版完整二进制包 |
| checksums.txt | 上述包的 SHA-256,读取 Combined 行的 sha256= 值 |
| IFLYADLib-resources-6.5.1.zip | TOS 同版手动资源补充包,含三个成品 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/。多个格式的共享依赖只加入一次。
| 使用的格式 | 必须链接的二进制 | 必须复制的资源 |
|---|---|---|
| Banner | IFLYAdCore、IFLYAdBanner | Core bundle、独立隐私清单 |
| 自渲染信息流 | IFLYAdCore、IFLYAdNativeFeed | Core bundle、独立隐私清单 |
| 开屏 | IFLYAdCore、IFLYAdVideoUI、IFLYAdSplash | Core、VideoUI bundle、独立隐私清单 |
| 插屏 | IFLYAdCore、IFLYAdVideoUI、IFLYAdInterstitial | Core、VideoUI bundle、独立隐私清单 |
| 激励视频 | IFLYAdCore、IFLYAdVideoUI、IFLYAdReward | Core、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 工程
- 在工程目录新建
Vendor/IFLYSDK/6.5.1/,放入上表要求的 XCFramework、完整 bundle 和隐私清单。保留文件名与 bundle 内部结构,不要引用“下载”目录中的临时文件。 - 在 Xcode 选择 File → Add Files to “YourApp”…,选中所需
.xcframework根目录和资源。文件尚未位于工程目录时勾选 Copy items if needed(新版 Xcode 为 Copy files to destination),并勾选自己的 App target。不要选单个平台切片,也不要把整个下载目录拖入 target。 - 在 App target → General → Frameworks, Libraries, and Embedded Content 核对每个 XCFramework 只出现一次,全部设为 Do Not Embed。静态库参与链接,不使用 Embed & Sign。
- 在 App target → Build Phases → Copy Bundle Resources 加入上表所需资源。每个
.bundle以完整包加入,不展开后逐个拖入图片;这里不能出现 XCFramework、ZIP、__MACOSX或重复资源。framework 内部含资源不代表资源已经复制到 App。 - 在 Build Settings → Other Linker Flags 中,为 Debug 和 Release 保留
$(inherited)并添加-ObjC。在 Build Phases → Link Binary With Libraries 添加AdSupport.framework,把AppTrackingTransparency.framework的 Status 设为 Optional。 - 按下文导入模块并编译。完成安装检查后,再按本渠道隐私与广告指南发起请求;仅添加 SDK 不会自动请求广告。
GitHub 资源备用入口
需要核对或改用 GitHub 获取同版资源时,打开 6.5.1 Tag,确认版本选择器为 6.5.1,点 Code → Download ZIP;也可直接下载 同版源码 ZIP。这是源码及资源包,不含所需发布二进制,XCFramework 仍使用上面的 TOS 下载。
解压 IFLYADLib_iOS-6.5.1/ 后,按需取得:
spm/Core/IFLYADLibCoreResources.bundlespm/VideoUI/IFLYADLibVideoUIResources.bundlespm/Reward/IFLYADLibRewardResources.bundlespm/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* 符号,不能同时链接。不要混用不同版本的模块和资源。
安装结果检查
- 在 Xcode 选择 App scheme 和已安装的 iOS Simulator,执行 Product → Build。应完成编译与链接,没有模块缺失、重复符号或重复资源输出错误。
- 手动集成时,在 Products 下找到自己的
.app,右键 Show in Finder,再 Show Package Contents。应看到IFLYADLibCoreResources.bundle,视频格式另有IFLYADLibVideoUIResources.bundle,激励另有IFLYADLibRewardResources.bundle;App 根目录包含独立的PrivacyInfo.xcprivacy。不要只检查下载 ZIP 中存在资源。 - CocoaPods/SwiftPM 的资源可能位于生成的资源 bundle 中;检查最终 App 内能找到 SDK 资源和隐私清单,不要求目录与手动方式完全相同。可把下方路径替换为实际构建得到的
.app路径,在终端列出:
find "/绝对路径/YourApp.app" \( -name '*.bundle' -o -name 'PrivacyInfo.xcprivacy' \) -print安装失败排查
| 现象 | 检查与处理 |
|---|---|
| 下载为 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、设备标识和业务敏感参数。