Facebook iOS SDK 链接不需要的 AdSupport 库

Facebook iOS SDK links unwanted AdSupport library

TL;DR:将最新的 Facebook iOS SDK 添加到一个新的空项目中,将 AdSupport 放入 link table。 AdSupport提供了ASIdentifierManager,它提供了IDFA。对于儿童应用程序,这意味着自动拒绝。我的问题是:是否可以停止跟踪的这种传递性使用?

详情

可以找到 lots of copies 的句子“[T]he Facebook SDK does not require AdSupport.framework to be included.”。但是他们没有说明如何阻止 编译器将它添加到link table。看起来 Facebook 正试图强迫我们进行跟踪,无论我们是否愿意。 “ASIdentifierManager”的出现次数正在增长:

- SDK 7: 13 appearances
- SDK 9: 30
- SDK 11: 66

重现

(短)

  1. 通过 SPM 添加 SDK。
  2. 运行 otool 在生成的 executable 上观察
    Load command 18
             cmd LC_LOAD_DYLIB
         cmdsize 88
            name /System/Library/Frameworks/AdSupport.framework/AdSupport

(长)

  1. 从一页空白应用开始,将其命名为 TestFBSDK
  2. 使用 Swift 包管理器
  3. 添加对 https://github.com/facebook/facebook-ios-sdk.git 的依赖
  4. 不要导入或使用 SDK
  5. 为“任何 iOS 设备”构建应用存档
  6. 在管理器的存档窗格中找到新存档 window。
  7. 右键单击存档条目并选择 Show in Finder
  8. 右键单击存档文件并选择 Show Package Contents
  9. 导航到 Products/Applications/ 文件夹。
    • 它包含 .app 文件。
  10. 打开终端,输入 cd 并将应用程序图标拖到终端 window。
    • 你会得到类似 cd /.../Library/Developer/Xcode/.../TestFBSDK.app
  11. 按 Enter 键更改目录
  12. 运行命令
    • otool -l TestFBSDK | grep AdSupport -A 3 -B 3
  13. 运行命令
    • nm TestFBSDK | grep ASIdentifierManager

另请参阅

十年前有很多关于此的帖子,但我看不到最新的帖子。

在此期间,一些人已经尝试对 Facebook SDK 的部分内容进行评论或 ifdef-ing。问题是在多大程度上追求你的编辑的传递关闭。

这是一个 link 对我有用的最小差异集。也就是说,可执行文件没有 AdSupportASIdentifierManager 引用。

https://github.com/snorrsi/facebook-ios-sdk/commit/9d69d9ab0e510359311085def696c750c345037a