Xcode 11 (бета) не распознает архитектуру статической библиотеки

После волнения по поводу объявлений WWDC в 2019 году я попытался скомпилировать свое существующее приложение для iOS под MacOS, используя бета-версию Xcode 11.0. К сожалению, все пошло не так, как ожидалось.

Xcode говорит, что моя статическая библиотека построена для архитектуры :

Сборка для UIKit для Mac, но связанная библиотека 'libssl.a' была создана для . Возможно, вам придется ограничить платформы, для которых эта библиотека должна быть связана в целевом редакторе.

Но когда я проверяю свои статические библиотеки, я вижу, что они содержат желаемую архитектуру x86_64:

Я считаю, что эта проблема может быть связана с ошибкой бета-версии Xcode. У кого-нибудь есть мысли по этому поводу?

1 ответ

Решение

По словам Эдфорда, инженера по программному обеспечению Apple, вам нужно создать свои двоичные файлы для платформы iOS, ориентируясь на x86_64 архитектура. Вы можете найти очень полезную дискуссию здесь: https://forums.developer.apple.com/message/362577.

Что я сделал с моими двоичными файлами, так это построил их для x86_64, используя CFLAGS "-target x86_64-apple-ios13.0-macabi" и вручную указав нужную платформу SDK через опцию -isysroot, Это хорошо работало для OpenSSL и libOpus.

Я считаю, что многие библиотеки должны быть адаптированы для работы с UIKitForMac, и если вы не хотите ждать, пока команда разработчиков сделает это, вам придется закатать рукава.

Удачи, ребята!

Все вышеперечисленные решения у меня не сработали, поэтому я продолжил и попытался исправить это для своей системы под управлением Mac OSX 10.15.4.

В моем случае именно здесь вышеперечисленные решения перестали работать для меня:

no such sysroot directory: '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.4.sdk' [-Wmissing-sysroot]

Я прочитал файл build-libssl.sh и заметил, что версия sdk была взята сценарием с использованием кода:

xcrun -sdk macosx --show-sdk-version

который в моей системе действительно возвращается:

10.15.4

Использование Finder для навигации к месту:

'/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/

показал мне, что MacOSX10.15.4.sdk действительно не существует. Однако был MacOSX10.14.sdk. Я использовал эти знания, чтобы придумать следующее решение:

Версия OpenSSL <= 1.0 (1.0.2l)

версии <= 1.0 должны использовать только --arch, а не --target!

git clone git@github.com:marcelosalloum/OpenSSL-for-iPhone.git --branch feature/mac-catalyst && \
cd OpenSSL-for-iPhone && \
./build-libssl.sh --arch="MacOSX_x86_64 i386 arm64 armv7s armv7 tv_x86_64 tv_arm64" --macosx-sdk=10.15 --version="1.0.2l"

Версия OpenSSL>= 1.1 (1.1.0) в настоящее время не работает

версии> = 1.1 следует использовать только --target, а не --arch!

git clone git@github.com:marcelosalloum/OpenSSL-for-iPhone.git --branch feature/mac-catalyst && \
cd OpenSSL-for-iPhone && \
./build-libssl.sh --targets="mac-catalyst-x86_64 ios-sim-cross-i386 ios64-cross-arm64 ios-cross-armv7s ios-cross-armv7 tvos-sim-cross-x86_64 tvos64-cross-arm64" --macosx-sdk=10.15 --version="1.1.0" -v
Другие вопросы по тегам