开发者社区 问答 正文

从自制的IOS框架链接第三方库(在我的框架中不包括第三方库)

我创建了一个框架,我想将GoogleAnalyticsLibrary(3.1.7)添加到这个框架中。包含此框架的应用程序已经包含相同的库。

首先,我在框架和应用程序中都安装了GA-SDK,它在iOS 11-13上工作。但是,运行时错误(SIGSEGV)仅发生在iOS 10上。方法发生错误:-[GAIBatchingDispatcher initWithDataStore:]

如果你在一个不包含GA的应用程序中嵌入框架,它会运行得很好,所以我认为这个错误是因为Gai包含在这两个二进制文件中。

我不想将GoogleAnalytics包括在框架中,并且使用GoogleAnalytics在应用程序中导入,就像这样。

https://i.stack.imgur.com/szbiC.png

有办法做到这一点吗?

框架和应用程序有不同的工作区

(SDK和APP)构建和(APP)安装在每个操作系统上都是成功的。

为了检查二进制,我使用了‘nm’命令

展开
收起
游客5akardh5cojhg 2019-12-05 21:52:52 383 分享 版权
阿里云 AI 助理回答

面对您描述的问题,确实可能是由于Google Analytics库在您的框架和主应用程序中都被包含而导致的冲突。解决这个问题的关键在于确保Google Analytics SDK只被加载一次,即避免重复链接。以下是一些建议来实现您的需求:

  1. 动态框架分离: 如果可能的话,将Google Analytics SDK从您的自定义框架中移除,并将其作为单独的动态框架处理。这样,主应用程序在集成您的框架时,只需直接集成GA SDK即可,避免了重复。

  2. 使用CocoaPods或Carthage进行依赖管理: 如果您还没有使用依赖管理工具,考虑使用CocoaPods或Carthage。这些工具可以帮助您更好地管理依赖关系,确保依赖只被导入一次。在Podfile或Cartfile中指定Google Analytics SDK,然后在应用项目中引用它,而不是在框架内部。

    • 对于CocoaPods,您可以在主应用程序的Podfile中添加Google Analytics依赖,同时在框架的Podspec文件中明确排除GA(如果框架本身也通过Pods管理)。

    • 使用Carthage类似,确保在主应用的Cartfile中列出GA SDK,并正确地将生成的框架链接到应用中,而非框架项目中。

  3. 条件编译: 如果上述方法不可行,您可以通过条件编译宏来控制Google Analytics SDK在不同环境下的编译情况。但这需要更细致的配置,且不是最理想的解决方案。

  4. 模块映射: 在您的框架中,尝试利用模块映射(module map)来声明对Google Analytics的外部依赖,而不是直接包含其源代码。这样,当您的框架被集成到一个已经包含了GA SDK的应用中时,会重用该应用中的GA实例,而不是尝试重新加载。

  5. 清理和验证二进制: 确保在构建过程中没有意外地将GA的二进制文件复制到您的框架中。检查构建设置,特别是“Link Binary With Libraries”和“Embedded Binaries”部分,确保没有重复添加GA SDK。

请根据您的具体开发环境和偏好选择合适的方法。采用依赖管理工具是推荐的做法,因为它能简化依赖管理和版本控制,减少这类问题的发生。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: