2016-12-28 7 views
2

У меня есть приложение для iOS, которое добавляет Sound FX к видео. Теперь я хочу создать целевую программу расширения приложения для поддержки прилагаемого Photo App. Тем не менее, я должен дублировать почти все коды из приложения iOS. И мое решение, которое я имею до сих пор, заключается в том, чтобы распространять общие функции в общих файлах и использовать их для обеих целей, потому что некоторые коды в приложении, связанные с AppDelegate, и я не могу использовать его в приложении Extension. Есть ли лучший способ избежать дублирования кода в этом случае?Основание расширения приложения для iOS для существующего приложения. Как избежать дублирования кода?

Еще один вопрос: большинство расширений, которые я видел на AppStore, имеют только 1 экран, есть ли какие-либо правила для этого?

В моем приложении я должен позволить пользователям выбирать звуки из папки & библиотеки, и для этого требуется контроллер навигации. Но диспетчер навигации не может использоваться в расширении приложения, должен ли я создать собственный контроллер Navigaion или есть лучший способ?

ответ

1

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

В качестве дополнительного бонуса из-за того, как ОС обрабатывает загрузку разделяемой библиотеки, все фактические страницы кода распределяются между приложением и расширением, поэтому вы также не тратите впустую RAM.

+0

Большинство моих классов являются View Controller, а в классах я ссылаюсь на App Delegate, который нельзя использовать в приложении Extension –

+0

. Одним из решений является добавление слоя абстракции. Например, вы можете создать одноэлементный класс, в котором хранятся интересные данные, вместо того, чтобы хранить его в делете приложения, или вы можете создать два класса с тем же именем - в приложении, где вызов метода делает что-то в делегат приложения и другой в расширении, методы которого делают что-то другое. – dgatwood

+0

Другой подход, если на самом деле вам не нужны некоторые функции в расширении, будет связана с слабой связью с классом делегирования приложения, а затем проверьте, не является ли этот класс нулем, и если это так, вы работает в расширении, и вы пропускаете рассматриваемое поведение. – dgatwood

Смежные вопросы