linker - Facebook iOS SDK 链接不需要的 AdSupport 库
问题描述
TL;DR : 将最新的 Facebook iOS SDK 添加到一个新的空项目中,并放入AdSupport
链接表中。AdSupport
提供ASIdentifierManager
,它提供了 IDFA。对于儿童应用程序,这意味着自动拒绝。我的问题是:是否有可能停止跟踪的这种传递使用?
细节
人们可以找到很多“[T]he Facebook SDK 不需要包含 AdSupport.framework”这句话的副本。但是他们没有说明如何阻止编译器将其添加到链接表中。看起来 Facebook 正试图强迫我们进行追踪,无论我们是否愿意。“”的出现次数ASIdentifierManager
越来越多:
- SDK 7: 13 appearances
- SDK 9: 30
- SDK 11: 66
重现
(短的)
- 通过 SPM 添加 SDK。
- 在生成的可执行文件上运行
otool
并观察
Load command 18
cmd LC_LOAD_DYLIB
cmdsize 88
name /System/Library/Frameworks/AdSupport.framework/AdSupport
(长)
- 从一个一页的空应用程序开始,调用它
TestFBSDK
- 添加依赖以
https://github.com/facebook/facebook-ios-sdk.git
使用 Swift 包管理器 - 请勿导入或使用SDK
- 为“任何 iOS 设备”构建应用存档
- 在“管理器”窗口的“档案”窗格中找到新档案。
- 右键单击存档条目并选择
Show in Finder
。 - 右键单击存档文件并选择
Show Package Contents
. - 导航到
Products/Applications/
文件夹。- 它包含
.app
文件。
- 它包含
- 打开终端,键入
cd
应用程序图标并将其拖动到终端窗口。- 你会得到类似的东西
cd /.../Library/Developer/Xcode/.../TestFBSDK.app
- 你会得到类似的东西
- 按 Enter 更改目录
- 运行命令
otool -l TestFBSDK | grep AdSupport -A 3 -B 3
- 运行命令
nm TestFBSDK | grep ASIdentifierManager
也可以看看
十年前有很多关于这个的帖子,但我看不到最新的。
解决方案
在此期间,有些人尝试评论或 ifdef 删除 Facebook SDK 的部分内容。问题是在多大程度上追求编辑的传递闭包。
这是对我有用的一组最小差异的链接。也就是说,可执行文件没有AdSupport
或ASIdentifierManager
引用。
https://github.com/snorrsi/facebook-ios-sdk/commit/9d69d9ab0e510359311085def696c750c345037a
推荐阅读
- node.js - 在带有 NodeJS 的 MongoDB 中使用 $in 的问题
- javascript - 不理解跳棋游戏 JavaScript 中的奇怪变量行为
- javascript - 无法读取未定义的属性“样式”?
- python - 为什么这个 LSTM 模型的预测值显示出一条平行线不跟随趋势
- java - 如何确保 Java CDI 框架实现将在自定义 bean 的自定义注入点注入实例?
- node.js - 如何在 cPanel 共享主机上部署 Meteor 应用程序
- python - 如何使用键盘库听多个键?
- numpy - 点积广播
- c# - 从 HttpClient SendAsync 请求获取响应时出现无法解释的超时和延迟
- javascript - 如何防止 Number.parseFloat 自动舍入数字?