将Flutter添加到已有iOS应用

Integrate a Flutter module into your iOS project

Option B - Embed frameworks in Xcode

  1. link on the frameworks,拖入Build Phases -> Link Binary With Libraries
  2. embed the frameworks,拖入Build Phases -> Embed Frameworks,选中CodeDesign
  3. Build Settings -> Library Search Paths and Framework Search Paths 添加路径
  4. 编译 ⌘B. 整个过程注意完整性,应用之前可以先clean项目,避免不必要错误

注:嵌入不正确会导致启动错误,以上1,2步可以直接拖入General -> Frameworks, Libraries, and Emdeded Content

pod XXX target has libraries with conflicting names XXX,在项目中找到对应文件删除引用即可,找不到删除pod.lock 重新pod install

——————————————————

Q: Multiple commands produce '***/Frameworks/Flutter.framework
(依赖项目和编译环境,第一次报错,清理项目之后第二次可以正常编译,不用删除Flutter.framework)
原因:
原文链接
Embed框架为Runner项目构建阶段
[CP]嵌入Pods框架构建pod安装在项目中创建的阶段。
第一项用于确保在没有插件的情况下将框架复制到构建的应用程序中(因此在Xcode项目中没有CocoaPods集成)。
第二项是因为Flutter的podspec将Flutter.framework声明为vended_framework,而CocoaPods会自动为CocoaPods依赖项的传递闭包中的每个这样的vended_framework添加一个复制步骤。
解决方式
方式1:使用 Legacy Build System (File -> Workspace Settings),验证无效报错

方式2:使用 New Build System,删除Targets -> Build Phases -> Embed Frameworks -> 删除Flutter.framework (保留App.framework)

注意:都需要进行重新签名,已经签名的App.framework和Flutter.framework安装界面Detail显示无效签名

注意:使用官方的Tips进行$(CONFIGURATION) 把Debug和Release 下的framework都引入到 Build Phases -> Embed Frameworks,还是会报Multiple commands produce 错误,暂没有更好的方案,可以手动全部Drag引入,注意排除静态库

——————————————————

Do Not EmbedEmbed & SignEmbed Without Signing

Embed:用于动态库,在运行时链接,所以需要被打进bundle里面

判断动态库还是静态库 命令:file frameworkToLink.framework/frameworkToLink

  • current ar archive 静态库,选择 Do not embed
  • Mach-0 dynamically 动态库,选择 Embed

Signing:只用于动态库,如有了签名就不需要签名了

判断 命令:codesign -dv frameworkToLink.framwork

  • code object is not signed at all 或者 adhoc,选择embed and sign
  • 其他,标识已经正确签名,选择Embed Without Signing

Q:MissingPluginException
A:https://blog.csdn.net/u011228060/article/details/120414390
A:https://blog.z7ge.com/archives/flutter-missingpluginexception-bu-yao-huang

你可能感兴趣的:(将Flutter添加到已有iOS应用)