首页 > 解决方案 > Flutter:添加共享扩展

问题描述

问题

我已将 iOS 添加Share Extension到一个非常简单的 Flutter 项目中,

我在功能分支上使用设备设置代码,我也知道颤动中的位码尚未准备好

Target: Share Extension在设备上运行

ld: '[Project_Path]/ios/DerivedData/Products/Debug-iphoneos/FMDB/libFMDB.a(FMDatabase.o)' 
does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting 
ENABLE_BITCODE)

Target: The Container App在设备上运行

注意:这[CP] Embed Pods Framworks[ProjectCompare].

* Run custom shell script '[CP] Embed Pods Framworks'....
* Validate [Project_Path]/ios/DerivedData/Products/Debug-iphonos/Runner.app/PlugIns/
  ShareExtension.appe(in target: Runner)
* cd [Project_Path]/ios
* builtin-embeddedBinaryValidationUtility [Project_Path]/ios/DerivedData/Products/
  Debug-iphonos/Runner.app/PlugIns/ShareExtension.appex 
    -siging-cert [someID] 
    -info-plist-path [Project_Path]/ios/DerivedData/Products/Debug-iphonos/Runner.app/Info.plist
* error: Embedded binary is not signed with the same certificate as the parent app. 
  Verify the embedded binary target's code sign settings match the parent app's.
    * Embedded Binary Signing Certificate:    Not Code Signed
    * Parent App Signing Certificate:  iPhone Developer: MyName (XXXXX)

比较

我也创建了一个纯 iOS 项目ProjectCompare,并在更改后添加Pod到其中。我打开项目workspace并添加Share Extension,它在设备上运行良好。

问题

所以我想也许一些与 Flutter 设置相关的脚本会导致这个错误?还是Podfile中的脚本?

知道该怎么做吗?

更新

覆盖设置后Target: Share Extension

  • LIBRARY_SEARCH_PATHS= "";
  • OTHER_LDFLAGS= ""; 或 OTHER_LDFLAGS=“-ObjC”;

在设备上运行Target: ShareExtension和运行Target: The Container App都可以。

标签: fluttercocoapodsbitcodeshare-extension

解决方案


所以在@pulyaevskiy的帮助下。我找到了解决方法:

短的:

overwrite设置Target: Share Extension:(git diff示例

LIBRARY_SEARCH_PATHS= "";

OTHER_LDFLAGS= ""; 或 OTHER_LDFLAGS=“-ObjC”;

细节:

  1. 位置:运行时Target: ShareExtension&Target: Container App 都出错,只是因为添加了Target: Share Extension. 这意味着错误主要来自Target: ShareExtension.

  2. 列出命令详细信息:

[Clang Path]/clang -arch arm64 -isysroot 
[iOS SDK Path]/iPhoneOS12.4.sdk 
-L[Project Path]/ios/DerivedData/Products/Debug-iphoneos 
-L[Project Path]/ios/DerivedData/Products/Debug-iphoneos/FMDB      <-- this 
-L[Project Path]/ios/DerivedData/Products/Debug-iphoneos/sqflite   <-- this 
-F[Project Path]/ios/DerivedData/Products/Debug-iphoneos 
-F[Project Path]/ios/Pods/../.symlinks/flutter/ios 
-filelist [Project Path]/ios/DerivedData/Build/Intermediates/Runner.build/Debug-iphoneos/ShareExtension.build/Objects-normal/arm64/ShareExtension.LinkFileList 
-Xlinker 
-rpath 
-Xlinker @executable_path/Frameworks 
-Xlinker 
-rpath 
-Xlinker @loader_path/Frameworks 
-Xlinker 
-rpath 
-Xlinker @executable_path/Frameworks 
-Xlinker 
-rpath 
-Xlinker 
@executable_path/../../Frameworks 
-miphoneos-version-min=12.4 
-dead_strip 
-Xlinker 
-object_path_lto 
-Xlinker [Project Path]/ios/DerivedData/Build/Intermediates/Runner.build/Debug-iphoneos/ShareExtension.build/Objects-normal/arm64/ShareExtension_lto.o 
-Xlinker 
-export_dynamic 
-Xlinker 
-no_deduplicate 
-fembed-bitcode-marker 
-fobjc-arc 
-fobjc-link-runtime 
-fapplication-extension 
-ObjC 
-lFMDB              <-- this 
-lsqflite           <-- this 
-lsqlite3           <-- this 
-framework Flutter  <-- this 
-e _NSExtensionMain 
-Xlinker 
-dependency_info 
-Xlinker [Project Path]/ios/DerivedData/Build/Intermediates/Runner.build/Debug-iphoneos/ShareExtension.build/Objects-normal/arm64/ShareExtension_dependency_info.dat 
-o [Project Path]/ios/DerivedData/Products/Debug-iphoneos/ShareExtension.appex/ShareExtension

错误详情:

ld: '[Project_Path]/ios/DerivedData/Products/Debug-iphoneos/FMDB/libFMDB.a(FMDatabase.o)' 
does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting 
ENABLE_BITCODE)
  1. 所以 searchTarget: ShareExtension的设置与FMDB,有3个结果:

    1. Other Linker Flags-l"FMDB"
    2. Header Search Flags"${PODS_ROOT}/Headers/Public/FMDB"
    3. Library Search Flags"${PODS_CONFIGURATION_BUILD_DIR}/FMDB"
  2. Library Search Flags是一个像 的路径DerivedData/Products/Debug-iphoneos/FMDB/libFMDB.a,所以我overwrite"",导致 git diff添加一个新行: LIBRARY_SEARCH_PATHS = "";

  3. 运行Target: ShareExtension查看结果:这两行命令详情不见了

-L[Project Path]/ios/DerivedData/Products/Debug-iphoneos/FMDB
-L[Project Path]/ios/DerivedData/Products/Debug-iphoneos/sqflite 

错误变为(这也意味着上述更改有效):

ld: library not found for -lFMDB
  1. 再次搜索FMDB,我猜Other Linker Flags:-l"FMDB"就像 的错误-lFMDB,所以我overwrite""(或左"-ObjC"),结果 git diff 是添加一个新行: OTHER_LDFLAGS = "";OTHER_LDFLAGS = "-ObjC";

  2. 运行Target: ShareExtension&Target: Container App现在都可以了。

检查git中的变化不同

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述


推荐阅读