Собственные ссылки в проектах iOS, Mac и привязок
Собственные ссылки предоставляют возможность внедрения собственной платформы в проект Xamarin.iOS или Xamarin.Mac или проект привязки.
Так как iOS 8.0 можно создать внедренную платформу для совместного использования кода между расширениями приложений и основным приложением в Xcode. Используя функцию Native Reference, можно будет использовать эти внедренные платформы (созданные с помощью Xcode) в Xamarin.iOS.
Внимание
Не удастся создавать внедренные платформы из любого типа проектов Xamarin.iOS или Xamarin.Mac, собственные ссылки позволяют использовать только существующие собственные (Objective-C) платформы.
Терминология
В iOS 8 (и более поздних версиях) Внедренные платформы могут быть внедрены как статически связанные, так и динамически связанные платформы. Чтобы правильно распределить их, необходимо сделать их в "fat" Framework, которые включали все их срезы для каждой архитектуры устройства, которую вы хотите поддерживать с приложением.
Статические и динамические платформы
Статические платформы связаны во время компиляции, когда Динамические платформы связаны во время выполнения и могут быть изменены без повторного связывания. Если вы использовали любую стороннюю платформу до iOS 8, вы использовали статическую платформу , которая была скомпилирована в приложение. Дополнительные сведения см. в документации по программированию динамической библиотеки Apple.
Внедренные и системные платформы
Внедренные платформы включены в пакет приложений и доступны только для конкретного приложения через песочницу. Системные платформы хранятся на уровне операционной системы и доступны для всех приложений на устройстве. В настоящее время только Apple имеет возможность создавать платформы уровня операционной системы.
Тонкие и жировые платформы
Тонкие платформы содержат только скомпилированный код для конкретной системной архитектуры, где Fat Frameworks содержит код для нескольких архитектур. Каждая база кода для конкретной архитектуры, скомпилированная в платформу, называется срезом. Например, если у нас была платформа, которая была скомпилирована для двух архитектур симулятора iOS (i386 и X86_64), она будет содержать два среза.
Если вы попытались распространить этот пример Платформы с приложением, он будет работать правильно на симуляторе, но сбой на устройстве, так как платформа не содержит фрагменты кода для устройства iOS. Чтобы убедиться, что платформа будет работать во всех экземплярах, также потребуется включить срезы, относящиеся к устройству, такие как arm64, armv7 и armv7s.
Работа с внедренными платформами
Для работы с внедренными платформами в приложении Xamarin.iOS или Xamarin.Mac необходимо выполнить два шага: создание fat Framework и внедрение платформы.
Создание fat Framework
Как упоминалось выше, чтобы иметь возможность использовать Внедренную платформу в приложении, она должна быть fat Framework, которая включает все системные архитектуры срезов для устройств, на которые будет работать ваше приложение.
Если платформа и потребляющее приложение находятся в одном проекте Xcode, это не проблема, так как Xcode создаст платформу и приложение с использованием одинаковых параметров сборки. Так как приложения Xamarin не могут создавать внедренные платформы, этот метод нельзя использовать.
Чтобы устранить эту проблему, lipo
средство командной строки можно использовать для объединения двух или нескольких платформ в одну платформу Fat Framework, содержащую все необходимые срезы. Дополнительные сведения о работе с командой см. в документации по связыванию lipo
собственных библиотек.
Внедрение платформы
Следующий шаг необходим для внедрения платформы в проект Xamarin.iOS или Xamarin.Mac с помощью собственных ссылок:
Создайте новый или откройте существующий проект Xamarin.iOS, Xamarin.Mac или Binding.
В Обозреватель решений щелкните правой кнопкой мыши имя проекта и выберите добавить>собственную ссылку:
В диалоговом окне "Открыть" выберите имя собственной платформы, которую вы хотите внедрить, и нажмите кнопку "Открыть".
Платформа будет добавлена в дерево проекта:
При компиляции проекта платформа Native Framework будет внедрена в пакет приложения.
Расширения приложений и внедренные платформы
Внутренне Xamarin.iOS может использовать эту функцию, чтобы связаться с средой выполнения Mono в качестве платформы (если целевой объект >развертывания = iOS 8.0), что значительно сокращает размер приложения с расширениями (так как среда выполнения Mono будет включена только один раз для всего пакета приложений, а не один раз для приложения-контейнера и один раз для каждого расширения).
Расширения будут связываться с средой выполнения Mono в качестве платформы, так как для всех расширений требуется iOS 8.0.
Приложения, у которых нет расширений и приложений, предназначенных для iOS
Итоги
В этой статье подробно рассматривается внедрение собственной платформы в приложение Xamarin.iOS или Xamarin.Mac.