我创建了一个框架,我想将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’命令
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
面对您描述的问题,确实可能是由于Google Analytics库在您的框架和主应用程序中都被包含而导致的冲突。解决这个问题的关键在于确保Google Analytics SDK只被加载一次,即避免重复链接。以下是一些建议来实现您的需求:
动态框架分离: 如果可能的话,将Google Analytics SDK从您的自定义框架中移除,并将其作为单独的动态框架处理。这样,主应用程序在集成您的框架时,只需直接集成GA SDK即可,避免了重复。
使用CocoaPods或Carthage进行依赖管理: 如果您还没有使用依赖管理工具,考虑使用CocoaPods或Carthage。这些工具可以帮助您更好地管理依赖关系,确保依赖只被导入一次。在Podfile或Cartfile中指定Google Analytics SDK,然后在应用项目中引用它,而不是在框架内部。
对于CocoaPods,您可以在主应用程序的Podfile中添加Google Analytics依赖,同时在框架的Podspec文件中明确排除GA(如果框架本身也通过Pods管理)。
使用Carthage类似,确保在主应用的Cartfile中列出GA SDK,并正确地将生成的框架链接到应用中,而非框架项目中。
条件编译: 如果上述方法不可行,您可以通过条件编译宏来控制Google Analytics SDK在不同环境下的编译情况。但这需要更细致的配置,且不是最理想的解决方案。
模块映射: 在您的框架中,尝试利用模块映射(module map)来声明对Google Analytics的外部依赖,而不是直接包含其源代码。这样,当您的框架被集成到一个已经包含了GA SDK的应用中时,会重用该应用中的GA实例,而不是尝试重新加载。
清理和验证二进制: 确保在构建过程中没有意外地将GA的二进制文件复制到您的框架中。检查构建设置,特别是“Link Binary With Libraries”和“Embedded Binaries”部分,确保没有重复添加GA SDK。
请根据您的具体开发环境和偏好选择合适的方法。采用依赖管理工具是推荐的做法,因为它能简化依赖管理和版本控制,减少这类问题的发生。