#swift #xcode #swiftui #ssl-certificate
#swift #xcode #swiftui #ssl-сертификат
Вопрос:
Я довольно новичок в программировании Swift / SwiftUI, поэтому я использовал пакет URLImage из https://github.com/dmytro-anokhin/url-image-demo в котором я хочу отображать изображения с моего локального компьютера. Изображения будут иметь следующий путь: https://myserver.local/path/img1.jpg Самый простой способ заставить меня работать с самоподписанным сертификатом — создать корневой сертификат CA и установить его на simulator в Xcode и включить полное доверие. Мне потребовалось полдня, чтобы правильно настроить сертификаты, но в итоге мой код работает, когда я начинаю отладку в симуляторе.
struct SListItem: View {
var solImage: String {
get {
return "https://myserver.local/path/image1.jpg"
}
}
var body: some View {
HStack {
URLImage(
url: URL(string: solImage)!,
options: URLImageOptions(
cachePolicy: .returnCacheElseLoad(cacheDelay: 0.0, downloadDelay: 0.25),
load: [.loadImmediately, .cancelOnDisappear],
maxPixelSize: CGSize(width: 3000, height: 3000)
),
empty: {
Text("Nothing here") // This view is displayed before download starts
},
inProgress: { progress -> Text in // Display progress
return Text("Loading...")
},
failure: { error, retry in // Display error and retry button
VStack {
Text(error.localizedDescription)
Button("Retry", action: retry)
}
},
content: { $0.resizable().aspectRatio(contentMode: .fit) }
).frame(width: 50, height: 50)
Text("Test123")
}
}
}
Но во время предварительного просмотра / просмотра в реальном времени это приводит к этой ошибке:
Произошла ошибка SSL, и безопасное соединение с сервером не может быть установлено.
Однако верно все следующее:
- Я могу получить доступ к изображению без проблем с SSL в Chrome, Safari на моем хосте macOS (сертификат CA установлен в системной цепочке ключей и является надежным для всех пользователей; веб-сервер имеет сертификат SSL, подписанный моим сертификатом CA)
- Я могу получить доступ к изображению без ошибок SSL из Safari на симуляторе (после того, как сертификат CA был установлен и полностью доверен)
- Как упоминалось выше, я могу получить доступ к изображению без ошибок SSL при запуске приложения в режиме отладки в симуляторе из Xcode.
- Если я выбираю изображение на веб-сайте, на котором есть подписанный сторонним поставщиком SSL-сертификат, тогда изображение отображается правильно как в симуляторе, так и в панели предварительного просмотра.
Это наводит меня на мысль, что панель предварительного просмотра Xcode использует какой-то другой репозиторий, в который мне нужно будет поместить свой сертификат CA, чтобы он работал. Если такая опция вообще существует.
Я использую iPhone 11 Pro Max в качестве схемы / симулятора предварительного просмотра, выбрана цель развертывания iOS 14.3.
Заранее благодарю вас за любую помощь.
Комментарии:
1. Следующее должно помочь developer.apple.com/forums/thread/15720
2. Я боялся, что кто-то предложит это 😉 Я видел статьи об использовании NSAppTransportSecurity и игре с URLSession, но на данный момент я отклонил их, поскольку мои знания о среде Apple / Swift слишком ограничены (я написал C / C на Windows, но никогда не Objective-C на Mac) — я просто надеялся, что должен бытьболее простой подход. Но если этого не произойдет, мне придется много читать. Спасибо.