- Additional XCode SDK — что это такое, и почему вам это не нужно
- Начало работы с macOS
- 1. Предварительные требования
- 2. Создайте приложение на портале центра приложений, чтобы получить секрет приложения.
- 3. Добавление модулей пакета SDK для центра приложений
- Интеграция 3,1 через Cocoapods
- Интеграция 3,2 через Carthage
- Интеграция 3,3 с помощью диспетчера пакетов SWIFT
- 3,4. интеграция путем копирования двоичных файлов в проект
- 4. Запуск пакета SDK
- 4,1. Добавление операторов Import
- 4,2. добавление start:withServices: метода
- 4,3. Замените заполнитель своим секретом приложения
- 4,4. Добавление возможностей Интернета для изолированных приложений
Additional XCode SDK — что это такое, и почему вам это не нужно
Apple привносит в мир много нового. Удачные нововведения приживаются, а неудачные понемногу отмирают. Кстати неудачных решений оказывается не так уж и мало и я считаю это абсолютно нормальным. В конце концов мы уважаем Apple именно за готовность идти на риск и экспериментировать:)
Все это в полной мере относится и к средствам разработки. В прошлой заметке я писал о нестандартном алгоритме поиске заголовочных файлов в XCode. Сегодня я хочу подробнее остановиться на так называемых SDK — в XCode этим термином называют комплект библиотек и заголовочных файлов под определенную версию iOS или Mac OS. Зачем нужны SDK в понимании xCode?
- Каждый SDK лежит в своей отдельной папке и безболезненно сосуществует в другими SDK — это позволяет вести разработку под разные ОС на одном компьютере. Раньше SDK лежали в /Developer/SDKs; к четвертой серии xCode они переехали внутрь xCode.app.
- Настроить проект под определенную версию OS — плевое дело. Достаточно указать SDK в настройках проекта.
Технически, это реализовано следующим образом. Apple добавила в компилятор ключ —sysroot. Значение sysroot дописывается как префикс в пути для поиска заголочных файлов и библиотек. Этой модификации подвержены как стандартные пути (ex: /usr/include), так и пользовательские пути, добавленные ключами -I и -L.
Работает это следующим образом. Допустим в настройках XCode выбран SDK macosx10.6. XCode передает компилятору ключ —sysroot=/Developer/SDKs/MacOSX10.6.sdk. В результате /usr/include превращается в /Developer/SDKs/MacOSX10.6.sdk/usr/include. То же самое происходит с путями для поиска библиотек и фреймворков. Как легко догадаться, внутри SDK есть usr/include и usr/lib с соответствующим содержимым.
Теперь самое время перейти к загадочной опции «Additional SDKs» в XCode.
Зачем это нужно? Допустим вы — компания, выпускающая middleware. Вы оформляете свои библиотеки и фреймворки в виде XCode SDK. Чтобы использовать ваш middleware в проекте, достаточно указать полный путь до вашего SDK в разделе Additional SDKs в настройках XCode. Заголовочные файлы и библиотеки становятся доступны автоматически.
Кстати, можно использовать много дополнительных SDK одновременно.
К сожалению, как это часто бывает, красивую идею губит реализация.
Для поддержки Additional SDKs, XCode приходится проделывать много дополнительной работы, что проявляется тормозами при сборке проекта. Для каждого используемого сочетания базового и дополнительных SDK, во временной папке создается объединенное дерево файлов из всех SDK и путь до этой папки передается в —sysroot. Вместо честного копирования файлов используются симлинки, но все равно процесс не быстрый.
Для желающих экспериментировать с Additional SDK, я подготовил проект на github. Обратите внимание на SDKSettings.plist. Этот файл необходим, чтобы XCode «признал» SDK.
В своих проектах я не использую Additional SDK и вместо этого вручную настраиваю пути для поиска хидеров, библиотек и фреймворков.
Бонус: SDK и версии ОС
Для каждой очередной версии ОС выходит новый SDK. Однако это не значит, что проект, скомпилированный с macosx10.8 SDK будет работать только на Mac OS X 10.8 и не запустится на более ранних ОС.
Версия SDK 10.8 означает, что SDK включает в себя все API которые доступны в Mac OS X 10.8 и более ранних системах (за исключением deprecated API). Если проект не использует возможностей, которые отсутствуют в OS X 10.6, тогда проект будет без проблем работать на 10.6.
Более интересная ситуация, когда мы задействуем новые фичи, если они доступны, а для старых систем используем альтернативную реализацию. Для этого используется weak linking. «Слабо прилинкована» может быть как целая динамическая библиотека, так и отдельная функция из динамической библиотеки. Если при запуске не удается найти слабо прилинкованную библиотеку, программа продолжит выполняться как ни в чем не бывало, а линкер подставит NULL в качестве адреса отсутствующих функций. Разумеется, если вызвать функцию, которой нет, программа упадет.
Поэтому перед вызовом мы сравниваем адрес функции с NULL, и если функция не доступна, используем альтернативную реализацию.
Источник
Начало работы с macOS
Пакет SDK для App Center использует модульную архитектуру для использования любой или всех служб.
Приступим к работе с настройкой пакета SDK для macOS App Center в приложении для использования сбоев аналитики центра приложений и центра приложений.
1. Предварительные требования
Для использования пакета SDK для App Center необходимо соблюдение следующих требований.
- Проект macOS настраивается в Xcode 11 или более поздней версии в macOS версий 10.14.4 или более поздней.
- Вы нацеливание на устройства, работающие на macOS 10,9 или более поздней версии.
- Вы не используете другую библиотеку, которая предоставляет функции создания отчетов о сбоях.
Пакет SDK для App Center будет удалять поддержку Xcode 10 с выпуском пакета SDK за июнь.
Пакет SDK для аналитики и сбоев пакета App Center совместим с Mac Catalyst через Кскфрамеворк или Свифтпм.
Пакет SDK для App Center совместим с Apple Silicon.
2. Создайте приложение на портале центра приложений, чтобы получить секрет приложения.
Если вы уже создали приложение на портале центра приложений, этот шаг можно пропустить.
- Перейдите к appcenter.MS.
- Зарегистрируйтесь или войдите в систему и нажмите синюю кнопку в правом верхнем углу портала с текстом Добавить новый и выберите Добавить новое приложение в раскрывающемся меню.
- Введите имя и необязательное описание приложения.
- Выберите macOS в качестве ОС и Цель-C/SWIFT в качестве платформы.
- Нажмите кнопку в правом нижнем углу, где говорится о добавлении нового приложения.
после создания приложения его секрет можно получить на странице Параметры на портале центра приложений. в правом верхнем углу страницы Параметры щелкните тройные вертикальные точки и выберите Copy app secret , чтобы получить секрет приложения.
3. Добавление модулей пакета SDK для центра приложений
пакет SDK для app Center для macOS можно добавить в приложение с помощью Cocoapods, Carthage, Swift диспетчер пакетов или вручную, добавив двоичные файлы в проект.
В 4.0.0 версии центра приложений появились критические изменения. Для переноса центра приложений из предыдущих версий следуйте инструкциям в разделе Миграция в пакет SDK 4.0.0 и более поздней версии центра приложений.
Интеграция 3,1 через Cocoapods
Добавьте следующие зависимости в podfile , чтобы включить в приложение сбои аналитики центра приложений и центра приложений. При этом извлекаются следующие платформы: аппцентер, аппцентераналитикс и аппцентеркрашес. Вместо этого можно указать службы, которые будут использоваться в приложении. Каждая служба имеет собственную подспецификацию, и все они используют AppCenter . Он будет извлечен автоматически.
Выполните команду, pod install чтобы установить только что определенный Pod, и откройте проект .xcworkspace .
Теперь, когда платформы интегрированы в приложение, пришло время запустить пакет SDK и использовать службы центра приложений.
Интеграция 3,2 через Carthage
Ниже приведены инструкции по интеграции пакета SDK для App Center в проект Xcode с помощью Carthage версии 0,30 или более поздней, децентрализованного диспетчера зависимостей, который создает зависимости и предоставляет двоичные платформы.
Добавьте следующие зависимости в Cartfile , чтобы включить центр приложений в приложение. Это извлекается во всех платформах. Затем можно связать только те платформы, которые будут использоваться в приложении.
Выполнить команду carthage update —platform macOS . Это извлекает зависимости в папку Carthage/Checkout , а затем выполняет сборку каждой платформы.
Откройте вкладку Общие параметры целевого приложения. перетащите файлы аппцентер. framework, аппцентераналитикс. framework и аппцентеркрашес. framework из папки Carthage/Build/macOS в Project навигатор Xcode. Для запуска пакета SDK требуется аппцентер. Framework . Если он не добавлен в проект, другие модули не будут работать и приложение не будет компилироваться.
Откроется диалоговое окно, убедитесь, что выбрана целевая версия приложения. Нажмите кнопку Готово.
Если вы используете carthage copy-frameworks на этапе сборки , вы не должны добавлять пакеты SDK для центра приложений, так как они поставляются как статические платформы.
Теперь, когда платформы интегрированы в приложение, пришло время запустить пакет SDK и использовать службы центра приложений.
Интеграция 3,3 с помощью диспетчера пакетов SWIFT
- В меню Xcode выберите файл > пакеты Swift > добавить зависимость пакета.
- В появившемся диалоговом окне введите URL-адрес репозитория: https://github.com/microsoft/appcenter-sdk-apple.git .
- В поле версия выберите значение до следующей основной и воспользуйтесь параметром по умолчанию.
- Выберите нужные модули в столбце продукт пакета .
Теперь, когда платформы интегрированы в приложение, пришло время запустить пакет SDK и использовать службы центра приложений.
Если вы интегрируете центр приложений с помощью Свифтпм и хотите использовать его в целевом объекте расширения приложения, убедитесь, что вы используете DISABLE_DIAMOND_PROBLEM_DIAGNOSTIC=YES конфигурацию. Это необходимо, чтобы избежать Свифтпм ограничений при связывании модуля с несколькими целями.
3,4. интеграция путем копирования двоичных файлов в проект
Ниже приведены инструкции по интеграции скомпилированных двоичных файлов в проекте Xcode для настройки сбоев в работе центра App Center и App Center для приложения macOS.
Пакет SDK для App Center поддерживает использование XCframework . Если вы хотите интегрировать Кскфрамеворкс в проект, скачайте AppCenter-SDK-Apple-XCFramework.zip со страницы выпусков и распакуйте ее. Итоговое содержимое папки не зависит от платформы, оно содержит Кскфрамеворкс для каждого модуля. Они могут быть интегрированы так же, как и обычные платформы, как описано ниже.
Загрузите платформы пакета SDK для центра приложений , предоставленные в виде ZIP-файла.
Распакуйте файл, и вы увидите папку с именем аппцентер-SDK-Apple , которая содержит различные платформы для каждой службы центра приложений в каждой папке платформы. Вызываемая платформа AppCenter является обязательной в проекте, так как она содержит код, совместно используемый разными модулями.
Используемых Создайте подкаталог для библиотек сторонних производителей.
- сторонние библиотеки обычно находятся в подкаталоге (часто называется « поставщик»), поэтому если проект не использует подкаталог для библиотек, создайте подкаталог поставщика .
- Создайте группу с именем Vendor в проекте Xcode, чтобы имитировать структуру файлов на диске.
Откройте папку unzipped аппцентер-SDK-Apple в Finder и скопируйте ее в папку проекта в том месте, где она нужна. Папка содержит платформы во вложенных папках для других платформ, поддерживаемых пакетом SDK для App Center, поэтому может потребоваться удалить ненужные вложенные папки.
Добавьте платформы SDK в проект в Xcode:
- убедитесь, что отображается навигатор Project (⌘ + 1).
- теперь перетащите аппцентер. framework, аппцентераналитикс. framework и аппцентеркрашес. framework из finder (из папки поставщика ) в Xcode Project Navigator. Для запуска пакета SDK требуется аппцентер. Framework . Если другие модули не работают, и приложение не будет компилироваться.
- Откроется диалоговое окно, убедитесь, что выбрана целевая версия приложения. Нажмите кнопку Готово.
Двоичный файл пакета SDK не упакован согласно соглашению о платформе macOS Framework. Причина в том, что пакет SDK для App Center для Mac не является стандартной платформой, но является статичным. Его необходимо связать как статическую платформу. Убедитесь, что вы не внедряюте двоичные файлы и не включите их на этапе сборки «Копирование ресурсов пакета».
Теперь, когда платформы интегрированы в приложение, пришло время запустить пакет SDK и использовать службы центра приложений.
4. Запуск пакета SDK
Чтобы использовать центр приложений, необходимо выбрать модули, которые вы хотите использовать. По умолчанию модули не запускаются, и при запуске пакета SDK необходимо вызывать каждый из них. Если вы разрабатываете для расширения, ознакомьтесь со страницей начало работы с расширением.
4,1. Добавление операторов Import
Откройте файл AppDelegate проекта и добавьте следующие инструкции import:
4,2. добавление start:withServices: метода
Вставьте следующую строку в didFinishLaunchingWithOptions метод делегата приложения:
Если у вас есть приложение Catalyst, вы можете одновременно передавать секреты приложения для iOS и macOS:
Если необходимо запускать службы центра приложений отдельно, необходимо выполнить следующие действия.
- Настройте или запустите его с помощью секрета приложения.
- Если код можно вызывать несколько раз, проверьте, настроен ли уже центр приложений.
- Запустите требуемые службы без секрета приложения.
4,3. Замените заполнитель своим секретом приложения
Обязательно замените
На начало работы странице содержится приведенный выше пример кода с секретом приложения, который можно скопировать и вставить целиком.
В приведенном выше примере показано, как start:withServices использовать start(withAppSecret:services:) метод (for SWIFT) и включать в него сбои аналитики центра приложений и центра приложений.
Если вы не хотите использовать одну из двух служб, удалите соответствующий параметр из приведенного выше вызова метода.
Если вы явно не указали каждый модуль как параметры в методе Start, вы не сможете использовать эту службу центра приложений. Кроме того, start:withServices start(withAppSecret:services:) API (for SWIFT) можно использовать только один раз в жизненном цикле приложения — все остальные вызовы будут записывать предупреждение в консоль, и будут доступны только модули, входящие в первый вызов.
Например, если вы хотите подключить к аналитике центра приложений, необходимо изменить start:withServices start(withAppSecret:services:) вызов API (для SWIFT) следующим образом:
4,4. Добавление возможностей Интернета для изолированных приложений
Если приложение использует песочницу приложения, необходимо установить возможность разрешить исходящие (клиентские) подключения, чтобы разрешить приложению доступ к Интернету. Xcode 9 включает песочницу приложения по умолчанию, но возможности исходящих соединений должны быть заданы явным образом.
Выберите проект в навигаторе проекта, перейдите на вкладку возможности и, если приложение использует песочницу, включите исходящие подключения.
Отлично, все готово для визуализации аналитики и сбоев данных на портале, который пакет SDK собирает автоматически.
Дополнительные сведения о настройке и использовании дополнительных функций каждой службы см. в документации по аналитике центра приложений и документации по центру приложений .
Источник