Как избежать ошибок SSL в окне предварительного просмотра Xcode

#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) — я просто надеялся, что должен бытьболее простой подход. Но если этого не произойдет, мне придется много читать. Спасибо.