浏览代码

update readme: add prelink step for ios build (first edition, need more polishing)

/siyaoH-1.17-PlatformMessage
Xingwei Zhu 3 年前
当前提交
dba8fd12
共有 1 个文件被更改,包括 35 次插入2 次删除
  1. 37
      engine/README.md

37
engine/README.md


./flutter/tools/gn --unoptimized --ios --bitcode //enable bitcode
```
add this line to the end of out/ios_debug_unopt/args.gn:
add this line to the end of out/ios_debug_unopt/args.gn, also
ensure that "bitcode_marker=false" if bitcode is enabled
```
icu_use_data_file=false
```

```
cd <uiwidigets_dir>\engine
mono bee.exe ios
```
```
### Prelink Library (TODO: make it simpler)
Different from other platforms, the engine is built as a static library on iOS. One drawback of this is that, there are potential library conflicts between our library and the Unity build-in library (libiPhone-lib.a). To address this issue, an additional prelink step is required. Since prelink is not supported by Bee yet (https://unity.slack.com/archives/C1RM0NBLY/p1617696912101700), we are doing it manually as follows:
Generate the symbols that need to be hidden from libtxt_lib.a:
```
nm -j $FLUTTER_ROOT/out/ios_debug_unopt/obj/flutter/third_party/txt/libtxt_lib.a > third.symbol
```
Prelink our library with libtxt_lib.a :
```
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -r -arch arm64 -syslibroot $IOS_SDK_PATH -unexported_symbols_list third.symbol $TARGET_FILES $FLUTTER_ROOT/out/ios_debug_unopt/obj/flutter/third_party/txt/libtxt_lib.a -o "libUIWidgets_d.o" //disable bitcode
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -r -arch arm64 -bitcode_bundle -bitcode_verify -syslibroot $IOS_SDK_PATH -unexported_symbols_list third.symbol $TARGET_FILES $FLUTTER_ROOT/out/ios_debug_unopt/obj/flutter/third_party/txt/libtxt_lib.a -o "libUIWidgets_d.o" //enable bitcode
```
where $IOS_SDK_PATH is the ios sdk path on your computer, which is usually inside "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/" and named like iPhoneOS*XX*.*YY*.sdk. $TARGET_FILES is all the target files (i.e., .o files) in our library. You can find a list of all target files in the file "artifacts/tundra.dag.json" by collecting all the file names with suffix ".o" from the **Action** of the **Annotation** "Lib_iOS_arm64 artifacts/libUIWidgets/debug_iOS_arm64/libUIWidgets_d.a".
Archive the target file into a static library:
```
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool" -arch_only arm64 -static "libUIWidgets_d.o" -o "libUIWidgets_d.a"
```
Strip all the internal symbols inside libtxt_lib.a to avoid link conflict:
```
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/strip" -x "libUIWidgets_d.a"
```
Copy the generated libUIWidgets_d.a inside the engine folder to the project (e.g., Samples/UIWidgetsSamples_2019_4/Assets/Plugins/iOS/) and replace the original libraries there (i.e., libtxt_lib.a and libUIWidgets_d.a)
正在加载...
取消
保存