Как правильно ссылаться на iOS сторонний фреймворк в сборке Ionic / Cordova, чтобы он не выдавал dyld: Библиотека не загружена: ошибка @rpath - PullRequest
1 голос
/ 23 апреля 2020

У меня есть проект Ionic5 (cli 6.3.0) / Cordova 9.0.3 (cordova-lib@9.0.2), в котором используются плагины.

Я пытаюсь создать собственный плагин для стороннего фреймворка.

Я знаю, что скелет плагина правильный, так как я создал его с помощью Plugman, и перед добавлением фреймворка я мог собрать / запустить и получить отзыв о том, что "coolMethod" был запущен из файла Objective- C.

Даже после добавления фреймворка я могу заставить плагин корректно установить с помощью ionic cordova plugin add ./packages/cordova-plugin-my-custom-stuff

Я могу заставить Ionic / Cordova успешно построить проект iOS с ionic cordova build ios

Но когда я пытаюсь запустить эмулятор iOS из командной строки Ioni c ionic cordova run ios или из автоматически сгенерированного проекта xCode, я получаю

 dyld: Library not loaded: @rpath/MyThirdPartySDK.framework/MyThirdPartySDK
 Referenced from: /Users/myUser/Library/Developer/CoreSimulator/Devices/C9E28EFF-B017-4F5E- 
 BA89-5200AE5D64EA/data/Containers/Bundle/Application/775C8394-B014-4B01-89CA- 
 1D462FD54F4A/MyName Mobile-UAT.app/MyName Mobile-UAT
 Reason: image not found

Структура проекта (сжато для ясность) выглядит так:

 MyProject
 -node_modules
 -packages
  -cordova-plugin-my-custom-stuff
   -src
    -ios
     MyCustomStuff.m
     -MyThirdPartySDK.framework
      -Headers
       MobileAPI.h
       MyThirdPartySDK.h
      -Modules
       module.modulemap
      MyThirdPartySDK
   -www
    cordova-plugin-my-custom-stuff.js
   package.json
   plugin.xml

Плагин. xml ios раздел выглядит следующим образом:

<platform name="ios">
    <config-file parent="/*" target="config.xml">
        <feature name="MyCustomStuff">
            <param name="ios-package" value="MyCustomStuff"/>
        </feature>
    </config-file>
    <source-file src="src/ios/MyCustomStuff.m"/>
    <source-file src="src/ios/MyCustomStuffSDK.framework" framework="true"/>
    <header-file src="src/ios/MyCustomStuffSDK.framework/Headers/MobileAPI.h" target-dir="MyCustomStuff" />
</platform>

Я ищу решение, которое находится внутри плагина. xml конфигурация или какой-то другой ioni c / cordovaproject c onfiguration. Я хотел бы избежать редактирования проекта xCode, поскольку все это «автоматически» генерируется командной строкой ionic / cordova.

1 Ответ

0 голосов
/ 29 апреля 2020

Наконец-то разобрался.

  <platform name="ios">
    <config-file parent="/*" target="config.xml">
        <feature name="MyCustomPlugin">
            <param name="ios-package" value="MyCustomPlugin"/>
        </feature>
    </config-file>
    <source-file src="src/ios/MyCustomPlugin.m"/>
    <source-file src="src/ios/MyCustomPlugin.framework" target-dir="lib" framework="true" />
    <framework src="src/ios/MyCustomPlugin.framework" embed="true" custom="true" />
    <header-file src="src/ios/MyCustomPlugin.framework/Headers/MobileAPI.h" target-dir="MyCustomPlugin" />
 </platform>
...