Я разрабатываю iOS приложение, которое использует отдельный SDK для некоторых общих бизнес-логи c. Этот SDK разработан в другом отдельном проекте, который создает динамический двоичный каркас c в качестве вывода. Типом комплекта этой платформы является XCFramework, который Apple предложила использовать начиная с Xcode 11. Содержимое этого XCFramework следующее:
MySDK.xcframework
├── Info.plist
├── ios-arm64
│ └── MySDK.framework
│ ├── Headers
│ │ ├── MySDK.h
│ │ ├── ...
│ ├── Info.plist
│ ├── Modules
│ │ └── module.modulemap
│ ├── MySDK
│ └── _CodeSignature
│ └── CodeResources
├── ios-x86_64-simulator
│ └── MySDK.framework
│ ├── Headers
│ │ ├── MySDK.h
│ │ ├── ...
│ ├── Info.plist
│ ├── Modules
│ │ └── module.modulemap
│ ├── MySDK
│ └── _CodeSignature
│ └── CodeResources
└── watchos-armv7k_arm64_32
└── MySDK.framework
├── Headers
│ ├── MySDK.h
│ ├── ...
├── Info.plist
├── Modules
│ └── module.modulemap
├── MySDK
└── _CodeSignature
└── CodeResources
Если я использую XCFramework на цели iOS, все работает, как и ожидалось, и просто импортировав модуль MySDK, я могу без проблем использовать SDK.
Однако, если я импортирую ту же платформу в цель расширения расширения и запусту ее в реальном iWatch, это даст нам следующая ошибка:
Подробности
Unable to install "Watch"
Domain: com.apple.dt.MobileDeviceErrorDomain
Code: -402620393
--
A signed resource has been added, modified, or deleted.
Domain: com.apple.dt.MobileDeviceErrorDomain
Code: -402620393
User Info: {
DVTRadarComponentKey = 364477;
MobileDeviceErrorCode = "(0xE8008017)";
"com.apple.dtdevicekit.stacktrace" = (
0 DTDeviceKitBase 0x000000011ff4681a DTDKCreateNSErrorFromAMDErrorCode + 233
1 DTDeviceKitBase 0x000000011ff87f70 __90-[DTDKMobileDeviceToken installApplicationBundleAtPath:withOptions:andError:withCallback:]_block_invoke + 155
2 DVTFoundation 0x000000010697e385 DVTInvokeWithStrongOwnership + 73
3 DTDeviceKitBase 0x000000011ff87ca8 -[DTDKMobileDeviceToken installApplicationBundleAtPath:withOptions:andError:withCallback:] + 1654
4 IDEiOSSupportCore 0x000000011fdfee91 __118-[DVTiOSDevice(DVTiPhoneApplicationInstallation) processAppInstallSet:appUninstallSet:installOptions:completionBlock:]_block_invoke.352 + 4165
5 DVTFoundation 0x0000000106ab1a10 __DVT_CALLING_CLIENT_BLOCK__ + 7
6 DVTFoundation 0x0000000106ab3652 __DVTDispatchAsync_block_invoke + 1194
7 libdispatch.dylib 0x00007fff729b6583 _dispatch_call_block_and_release + 12
8 libdispatch.dylib 0x00007fff729b750e _dispatch_client_callout + 8
9 libdispatch.dylib 0x00007fff729bcace _dispatch_lane_serial_drain + 597
10 libdispatch.dylib 0x00007fff729bd452 _dispatch_lane_invoke + 363
11 libdispatch.dylib 0x00007fff729c6a9e _dispatch_workloop_worker_thread + 598
12 libsystem_pthread.dylib 0x00007fff72c116fc _pthread_wqthread + 290
13 libsystem_pthread.dylib 0x00007fff72c10827 start_wqthread + 15
);
}
--
System Information
macOS Version 10.15.3 (Build 19D76)
Xcode 11.4 (16134)
Цель SDK скомпилирована для архитектуры watchOS, поскольку вы, ребята, можете видеть соответствующую папку внутри ее содержимого (watchos-armv7k_arm64_32). Кроме того, я убедился, что он был правильно скомпилирован с использованием инструмента LIPO.
Что я пробовал:
- Следуйте соответствующим вопросам здесь , здесь и здесь без какого-либо успеха.
- Дублируйте XCFramework только с архитектурой watchos и включите обе платформы в проект, но нацеленные на разные места назначения. Это также не работает.
- Попробуйте все варианты внедрения фреймворка: Embed & sign или Embed без подписи. Выдает ошибку, показанную выше.
Я немного растерялся и не знаю, что еще можно попробовать. Любой, кто мог бы пролить свет на это, был бы очень признателен.