프로그래밍/Unity, MAUI, Mono

[Xamarin iOS] iOS 9.0 이상에서 웹뷰(WebView)를 사용할때 "http" 사이트가 동작하지 않는다.

당근천국 2018. 2. 13. 15:30

보안 문제 때문에 9.0부터는 'http'를 기본 지원하지 않습니다.

권한을 수정하여 'http' 사이트도 볼 수 있도록 해봅시다.

 

0. 테스트 환경 만들기

자마린 크로스 플랫폼 프로젝트를 생성하고 'MainPage.xaml'을 아래와 같이 작성합니다.

 

 

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:WebViewTest"
             x:Class="WebViewTest.MainPage">
    <ContentPage.Content>
		<ScrollView x:Name="svMain">
			<WebView x:Name="wvMain" />
		</ScrollView>
    </ContentPage.Content>
</ContentPage>

 

 

'MainPage.xaml.cs'의 생성자를 아래와 같이 작성해 줍니다.

 


public MainPage()
{
	InitializeComponent();

	wvMain.Source = new UrlWebViewSource
		{
			Url = "http://google.com",
		};
	wvMain.VerticalOptions = LayoutOptions.FillAndExpand;
}

 

 

이제 테스트를 해보면 구글이 뜨지 않는 것을 알 수 있습니다.

 

 

 

1. 권한 추가

'http'를 사용하기 위해 권한을 추가합니다.

 

그런데 그냥 'Info.plist'파일을 열면 강제로 'iOS 매니페스트 편집기'가 실행되면서 임의로 지정된 값들을 날려버리는 문제가 있습니다.

그러므로 직접 XML 편집기를 실행하여 편집해야 합니다.

 

솔루션 탐색기 > 'Info.plist'을 선택 > 오른쪽 클릭 > '다른 프로그램으로 열기' 선택 > 'XML (텍스트) 편집기'를 선택합니다

 

 

 

 

전체를 허용하려면 '<dict>' 태그 바로 아래에 다음 값을 넣어 줍니다.

 

<key>NSAppTransportSecurity</key>
 <dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
 </dict>

 

 

 

 

 

 

특정 도메인만 허용하려면?

만약 특정 도메인만 허용하고 싶다면 아래 코드와 같은 방식으로 도메인을 추가하고 권한을 설정하면 됩니다.

(참고 : xamarin guides - App Transport Security)

 

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.the-domain-name.com</key>
        <dict>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.0</string>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

 

 

 

2. 테스트

권한 설정이 다 되었으면 이제 테스트를 해봅시다.

 

 

 

잘나오네요 ㅎㅎㅎ

 

3. 오류 해결

오류를 정리합니다.

 

3-1. 32bit는 지원하지 않는다는 오류
오류 메시지는 다음과 같습니다.

 

 

Invalid architecture: i386. 32-bit architectures are not supported when deployment target is 11 or later.

 

해결방법은 최소 버전을 지정하는 방법입니다.

참고 : [Xamarin iOS] iOS 웹뷰(WebView)에서 "32bit 아키텍처는 11 이상에서 지원되지 않는다." 오류

 

마무리

자마린 문제라기보다는 플랫폼별로 사상이나 컨샙문제로 인해서 권한이나 기능허용 여부가 다른 것이 제일 큰 문제인 것 같습니다.

이런 문제들만 해결되면 대부분 코드를 자마린 PCL쪽에서 처리할 수 있기 때문에 별문제 없이 진행됩니다 ㅎㅎㅎ

 

프로젝트 파일

WebViewTest.zip