Могу ли я упаковать все iOS-приложение как платформу? - PullRequest
10 голосов
/ 03 мая 2019

У меня есть приложение, реализованное на родной iOS (Swift). Также есть веб-версия приложения. Клиент хочет встроить мое приложение в собственное приложение и предложил использовать iFrame и загрузить веб-версию. Я понимаю, что это сложное решение, так как Apple может отклонить приложение за то, что оно не использует собственную реализацию.

Я хочу спросить, есть ли способ полностью упаковать мое приложение как Framework и загрузить его таким образом (размер приложения довольно большой, с несколькими viewControllers и функциональностью).

Я понимаю, что у меня не будет доступа к функциям загрузки приложений, таким как AppDelegate.

Кроме того, что произойдет, если мое приложение имеет библиотечные зависимости? (например, Alamofire)

Какие-нибудь другие вещи, о которых я должен беспокоиться?

Спасибо

1 Ответ

10 голосов
/ 24 мая 2019

Очевидно, что есть много вариантов, связанных с дизайном / подходом.

Я делал это несколько раз (с приложениями, живущими в магазине приложений), и на самом деле это похоже на разработку любой платформы.

Первый: AppDelegate. Самый простой способ обойти это - иметь подкласс AppDelegate приложения в вашей платформе AppDelegate:

@UIApplicationMain class ParentAppDelegate: FrameworkAppDelegate { }

Просто убедитесь, что приложение вызывает super для всех соответствующих методов.

Второе: Зависимости. Это, наверное, самая раздражающая часть, так как Frameworks не может встраивать другие фреймворки. Но у вас все еще есть несколько простых вариантов:

  1. Вложите в приложение необходимое фреймворк
  2. Добавьте источники необходимой инфраструктуры непосредственно в вашу инфраструктуру.
  3. Используйте менеджер зависимостей (например, cocoapods ), который позаботится об этом за вас.

Другие проблемы: Одна ловушка, с которой вы можете легко столкнуться, работает с Пакетами. Каждый раз, когда вы динамически загружаете изображения / строки / ссылки на IB / и т. Д. вам нужно будет указать, что вы используете комплект Framework , поскольку иногда он может по умолчанию использовать комплект приложения . Самый простой способ сделать это с этим init , например. Bundle(for: self.self)

Также имейте в виду, что родительское приложение должно будет добавить настройки в info.plist и права, необходимые для вашей платформы.

Общие комментарии по подходу: Мой совет (примите это или оставьте ☺️) будет осторожным при добавлении вашей полной заявки в заявку клиента. Помимо проблем с IP и App-Review, это может привести к значительному усложнению или развилке текущего приложения для его поддержки, что усложнит дальнейшее обслуживание.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...