Подтвердить что ты не робот

Как распределить Swift Library без раскрытия исходного кода?

Первым делом я попытался создать статическую библиотеку, но позже я обнаружил, что она еще не поддерживается. Примечания к выпуску Apple Xcode Beta 4:

Xcode не поддерживает создание статических библиотек, включающих код Swift. (17181019)

Я надеялся, что Apple сможет добавить это в следующую бета-версию или версию GA, но я прочитал следующее в их блоге:

Несмотря на то, что обеспечивается совместимость приложений во время выполнения, сам язык Swift будет продолжать развиваться, и двоичный интерфейс также будет меняться. На всякий случай все компоненты вашего приложения должны быть собраны с одной и той же версией Xcode и компилятором Swift, чтобы обеспечить их совместную работу.

Это означает, что фреймворки должны тщательно управляться. Например, если ваш проект использует фреймворки для совместного использования кода со встроенным расширением, вы захотите собрать фреймворки, приложения и расширения вместе. Было бы опасно полагаться на двоичные фреймворки, использующие Swift, особенно от третьих лиц. По мере изменения Swift эти фреймворки будут несовместимы с остальной частью вашего приложения. Когда бинарный интерфейс стабилизируется через год или два, среда выполнения Swift станет частью операционной системы хоста, и это ограничение больше не будет существовать.

Эта новость действительно тревожит меня, человека, который пишет компоненты, которые другие разработчики могут использовать и включать в свои приложения. Значит ли это, что мне нужно распространять исходный код или ждать два года? Есть ли другой способ распространения библиотеки без разоблачения кода (политика компании)?

Обновить:

Является ли в этот момент опция обфускации кода Swift?

4b9b3361

Ответ 1

Swift сейчас является бета-версией, и даже для 1.0 Apple было довольно ясно, что после ограниченного набора функций лучше делать небольшое количество вещей, чем пытаться сделать все.

Итак, пока нет возможности распространять бинарные статические библиотеки. Предположительно, это изменится после Swift 1.0. Пока вы можете:

  • Распространять источник
  • Отправляйте двоичную фреймворк (вместо библиотеки), если вы в порядке с ABI, являющимся хрупким
  • Использование ObjC для кода библиотеки

Вы всегда можете комбинировать подходы: например, реализовать критические (секретные) сведения о своей библиотеке в ObjC и отправить источник Swift, который обертывает его в хороший Swift API.

Obfuscating код, написанный на языке, который очень подвержен изменениям, звучит как рецепт кошмара для обслуживания.

Ответ 2

Я считаю, что весь подход ошибочен. Вы не можете сделать что-то, что еще не выполнимо с помощью технологии, которую вы пытаетесь использовать.

Обоснование: Swift - это новый язык, который сейчас находится в бета-версии, и поэтому меняется. Как я вижу, этот факт означает не только то, что вы не можете отправлять статические библиотеки, но эти (настоящие) разработчики фактически не будут использовать сторонние статические библиотеки. Какое фактическое использование библиотеки, которая может не работать в следующей версии компилятора? Проблема становится больше, если вы хотите использовать более одной библиотеки, потому что они могут быть несовместимы! Поэтому, даже если вы сможете отправлять статические библиотеки, они не будут действительно полезны для производственной среды. Итак, какая точка?

Предложение: напишите свои статические библиотеки в Objective-C (или C или что-то вроде "не-бета" ). Разработчики, которым нужны сторонние библиотеки (например, ваши), не должны ожидать, что они будут записаны в Swift до тех пор, пока Swift не станет стабильным. Вы не используете экспериментальные материалы для создания настоящих мостов, не так ли? Вы используете проверенные, предсказуемые.

Ответ 3

Начиная с Xcode 9 beta 4, Xcode поддерживает static library с исходниками Swift.