Как исключить стандартные, но неиспользуемые библиотеки libswift * .dylib из пакета приложений MacOS и уменьшить размер пакета - PullRequest
0 голосов
/ 28 августа 2018

Когда я собираю свое простое приложение какао-меню, написанное на Swift 4 с Xcode 9, многие библиотеки libswift * .dylib связываются / загружаются / встраиваются в комплект .app, в папку Frameworks, как показано ниже:

libswift

В моем проекте используются только import Cocoa и import Foundation, а некоторые функции @objc используются в качестве селектора для функций таймера. Я действительно не думаю, что моему очень простому приложению menubar потребуются некоторые функции библиотеки 3D-рендеринга Metal или какой-либо SwiftOnoneSupport, поэтому я бы хотел, чтобы они были удалены из пакета .app . (Те же библиотеки также включены в вспомогательное приложение для запуска при входе в систему, что позволяет даже вспомогательному приложению превышать 10 МБ)

Я бы подумал, что XCode просто скопирует все необходимое по умолчанию. Некоторые похожие вопросы были заданы здесь и здесь , но я не думаю, что есть исчерпывающий и актуальный ответ на оба вопроса.

То, что я пробовал до сих пор

Я установил ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES на NO в Build Settings. Это, кажется, не имеет никакого эффекта.

Я установил LINK_WITH_STANDARD_LIBRARIES на NO в Build Settings. Он разрушил все и не смог его собрать, хотя я пытался самостоятельно добавить некоторые фреймворки (Cocoa, Foundation) в разделе «Связанные фреймворки и библиотеки».

1 Ответ

0 голосов
/ 28 августа 2018

Проще говоря, невозможно исключить стандартные библиотеки, которые Swift автоматически включает в приложение, и ожидать, что оно будет работать. В настоящее время любое приложение, созданное с помощью Swift, включает собственную версию динамической библиотеки Swift. Swift не живет в операционной системе, а живет в каждом комплекте приложений. Это означает, что любое приложение, использующее Swift 4.1, например, пакеты в динамической библиотеке Swift 4.1 (содержащей ABI 4.1) и т. Д.

Одна из вещей в дорожной карте проекта Swift - в конечном итоге иметь ABI Stability . Если Swift станет стабильным ABI, Swift будет жить в операционной системе, и его ABI будет совместим с любой версией Swift.

...