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