Пользовательские элементы управления камерой iPhone (не используя UIImagePickerController)

Хотя я понимаю, что для того, чтобы приложение iPhone было принято в App Store, одним из требований является использование только документированных библиотек.

Если это так, то как некоторые приложения, такие как "Ночная камера" и "Камера Плюс", используют управление камерой, которое похоже на нечто, отличное от того, которое содержится в UIImagePickerController?

Я слышал о некоторых случаях, когда разработчику был предоставлен "специальный" доступ к определенным заголовкам, которые позволяют использовать функции, которые в противном случае были бы невозможны, если бы они были ограничены только использованием документированных библиотек. Однако, учитывая, насколько непрозрачный процесс выбора приложений для App Store, я предпочел бы придерживаться того, что рекомендуется, а не принимать мои шансы.

Кто-нибудь хочет пролить свет на это?

Ответы

Ответ 1

Возможно, вы захотите проверить classdump заголовков явных частных ящиков. Запустите этот perl script:

http://arstechnica.com/apple/news/2008/11/dumping-the-iphone-2-2-frameworks.ars

и перейдите в каталог PhotoLibrary в разделе PrivateFrameworks. Некоторые из классов здесь выглядят довольно многообещающими для прямого доступа к камерам.

Использование недокументированного API может повредить вашим шансам пройти через магазин приложений, но все это очень субъективно. Если ваш продукт хорош, яблоко, вероятно, позволит ему проскользнуть. Я бы рекомендовал подружиться с евангелистом-разработчиком в Apple.

Ответ 3

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

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

Ответ 4

Простым объяснением является то, что приложения в магазине не должны использовать неподдерживаемые API, но это не проверяется последовательно. Приложения, о которых вы упомянули, либо используют неподдерживаемые функции/классы/методы, либо играют с иерархией представлений, которая сама не документирована, даже если это можно сделать со стандартными API-интерфейсами.

Вы можете делать то, что они делают, и рисковать этим. Просто имейте в виду риски. Ваше приложение может быть (а) отклонено из магазина, (b) принято, но позже загружено (это произошло при использовании неподдерживаемого API), (c) быть принятым и не загруженным, но в следующий раз у Apple появится новое обновление программного обеспечения для iPhone (поскольку неподдерживаемые API или иерархии представлений могут меняться без предупреждения). Или вам повезет, и ничего подобного не произойдет.