#ios #swift #settings
#iOS #swift #Настройки
Вопрос:
Моему приложению требуется доступ к медиатеке пользователя. Мой вопрос относится к следующему сценарию:
- Для этого приложения не существует записи настроек iOS.
- Пользователь нажимает ссылку, чтобы запустить средство выбора мультимедиа Apple.
- Я открываю диалоговое окно авторизации доступа к медиа-библиотеке Apple
MPMediaLibrary.requestAuthorization()
- Пользователь нажимает «Не разрешить»
- Пользователь снова нажимает ссылку, чтобы запустить средство выбора мультимедиа Apple.
-
Я открываю диалоговое окно с предупреждением, объясняющее проблему и предоставляющее кнопку для открытия настроек iOS приложения.
UIApplication.shared.open(URL(string:UIApplicationOpenSettingsURLString)!)
Это работает нормально, пока приложение / экран настроек iOS не открыто. Запускается приложение «Настройки iOS» и открывает вновь созданные настройки моего приложения.
Если открыто приложение / экран настроек iOS (не для моего приложения, просто откройте где-нибудь), приложение настроек iOS появится и будет расположено там, где оно когда-либо было. Не то, что я хочу. Если я снова переключусь на свое приложение, открою диалоговое окно и второй раз введу URL open, настройки iOS откроются для моего приложения.
Это нормальное поведение? Как мне это исправить?
Stackoverflow хорошо справляется с представлением ссылок на существующие вопросы, которые могут быть ответом, который я ищу, но не получается.
Я все еще в тупике из-за проблемы с настройками моего приложения. Дальнейшее тестирование привело к появлению в lite связанной проблемы. Как и в настройках, значок моего приложения не отображается. Обе проблемы, похоже, решаются при 2-й установке. Я подумал, что, указав подробную информацию о значке приложения, кто-то может увидеть проблему.
Mac Mini
Mojave 10.14.4
Xcode 10.2
Xcode — Project — Цель развертывания IOS = 11.0
Xcode — Target — Цели развертывания = 12.1
Xcode — Swift v5
Физические устройства:
— iPhone 6plus ios 12.1.3
— iPhone X iOS 12.1.4
Поведение:
- installation on Xcode Simulator results in:
* icon appears as it should with initial installation.(multiple devices tested)
- installation on physical devices by Xcode side-loading via debugger results in:
* after initial installation, icon is missing.
* app runs as expected.
* ios settings entry exists.
* ios iPhone storage entry exists.
* 2nd debug run, icon appears. (2nd run can be immediate or after device disconnected/reconnected or Xcode restarted)
- installation of ipa on physical devices by Xcode -> Window -> Devices amp; Simulators results in:
* after initial installation, icon is missing.
* (of course app cannot be run without icon)
* ios settings entry exists.
* ios iPhone storage entry exists.
* 2nd ipa installation, icon appears. (2nd run can be immediate or after device disconnected/reconnected or Xcode restarted)
Примечание: я воссоздал и повторно сгенерировал свои значки несколькими различными инструментами. Никаких изменений в поведении.
Примечание: я загрузил пару простых демонстрационных проектов Xcode с GitHub. Они не содержат никаких значков. Они зависят от значка ios по умолчанию. То же поведение, что и в моем приложении.
Любые идеи или прямые догадки будут оценены.
Комментарии:
1. Я использую практически тот же код для открытия настроек в своем приложении, но с моей стороны он отлично открывает страницу настроек моих приложений, даже если настройки уже открыты. Мой код немного отличается:
UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!)
Вероятно, это потому, что я использую более новую версию Swift. Вы могли бы попробовать настроить новый проект с последней версией Xcode и iOS и попытаться воспроизвести проблему. Если проблема устранена, вам следует обновить все до последней версии.2. Спасибо за твой ответ, Зандор. В моем коде Swift 4.0 IOS 12.1 использовался предложенный вами синтаксис открытого URL. У меня только что был мозговой пердеж. Я пошел дальше и обновил проект до Swift 4.2, как вы предложили. Я по-прежнему получаю такое же поведение при тестировании на физическом iPhone 6 plus или iPhone X, как привязанном, так и не привязанном. So….no радость.
3. Я только что создал новый проект, поместил кнопку в центр представления раскадровки, создал выход действия и поместил свою предыдущую строку в действие. Я заметил, что это откроет настройки, но не страницу моего приложения. Это произошло потому, что страница приложения отсутствовала при ручной прокрутке настроек. Затем я включил удаленные уведомления в фоновом режиме, и страница появилась. Теперь нажатие кнопки открывает настройки приложения. Возможно, в вашем приложении нет никаких настроек? Вы можете загрузить мой тестовый проект по git.zsinfo.nl/Zandor300/appsettingstest чтобы попробовать это самостоятельно. (Xcode 12.2, Swift 5)
4. Зандор, спасибо за твои усилия. В моей ситуации запись приложения «Системные настройки» создается при установке / боковой загрузке / запуске приложения Xcode. (Я хотел бы протестировать установку на физическом устройстве без запуска …. это можно сделать в Xcode?)
5. То, что я сказал в своем последнем комментарии, было неверным. Запись приложения «Настройки системы» создается, когда я разрешаю или запрещаю авторизацию доступа к музыкальной библиотеке.
Ответ №1:
Как бы то ни было….. Я отправил приложение в Apple для проверки. Оно было одобрено и находится в App Store (Анонс песни). ipa, который я загрузил в App Store Connect, показал такое же поведение «нет значка приложения при первоначальной установке» при установке на мои устройства через Xcode. При загрузке из App Store значок отображается, как и ожидалось.
Поди разберись.
Комментарии:
1. Это должен быть комментарий. В ответах должно быть достаточно информации, чтобы понять ответ. Ответ должен быть описан на разумном уровне детализации и / или включать минимальный пример ответа.
2. Ответ «не беспокойтесь об этом». В моем случае это, похоже, проблема только с Xcode, будь то боковая загрузка или развертывание ipa на устройстве.