Flutter-IOS 특정 코드 작성

iOS 특정 코드에 액세스하는 것은 iOS 특정 언어 (Objective-C 또는 Swift 및 iOS SDK)를 사용한다는 점을 제외하고는 Android 플랫폼과 유사합니다. 그렇지 않으면 개념은 Android 플랫폼의 개념과 동일합니다.

iOS 플랫폼에 대해서도 이전 장에서와 동일한 애플리케이션을 작성해 보겠습니다.

  • Android Studio (macOS)에서 새 애플리케이션 flutter_browser_ios_app을 만들어 보겠습니다.

  • 이전 장에서와 같이 2-6 단계를 따릅니다.

  • XCode를 시작하고 File → Open

  • flutter 프로젝트의 ios 디렉토리에서 xcode 프로젝트를 선택합니다.

  • AppDelegate.m을 엽니 다. Runner → Runner path. 그것은 다음 코드를 포함합니다-

#include "AppDelegate.h" 
#include "GeneratedPluginRegistrant.h" 
@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application
   didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // [GeneratedPluginRegistrant registerWithRegistry:self];
      // Override point for customization after application launch.
      return [super application:application didFinishLaunchingWithOptions:launchOptions];
   } 
@end
  • 지정된 URL로 브라우저를 여는 메소드 인 openBrowser를 추가했습니다. 단일 인수, url을 허용합니다.

- (void)openBrowser:(NSString *)urlString { 
   NSURL *url = [NSURL URLWithString:urlString]; 
   UIApplication *application = [UIApplication sharedApplication]; 
   [application openURL:url]; 
}
  • didFinishLaunchingWithOptions 메서드에서 컨트롤러를 찾아 컨트롤러 변수에 설정합니다.

FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController;
  • didFinishLaunchingWithOptions 메소드에서 브라우저 채널을 flutterapp.tutorialspoint.com/browse로 설정합니다.

FlutterMethodChannel* browserChannel = [
   FlutterMethodChannel methodChannelWithName:
   @"flutterapp.tutorialspoint.com/browser" binaryMessenger:controller];
  • 변수 weakSelf를 만들고 현재 클래스 설정-

__weak typeof(self) weakSelf = self;
  • 이제 setMethodCallHandler를 구현합니다. call.method를 일치시켜 openBrowser를 호출하십시오. call.arguments를 호출하여 URL을 가져오고 openBrowser를 호출하는 동안 전달합니다.

[browserChannel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {
   if ([@"openBrowser" isEqualToString:call.method]) { 
      NSString *url = call.arguments[@"url"];   
      [weakSelf openBrowser:url]; 
   } else { result(FlutterMethodNotImplemented); } 
}];
  • 완전한 코드는 다음과 같습니다.

#include "AppDelegate.h" 
#include "GeneratedPluginRegistrant.h" 
@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application 
   didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   
   // custom code starts 
   FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController; 
   FlutterMethodChannel* browserChannel = [
      FlutterMethodChannel methodChannelWithName:
      @"flutterapp.tutorialspoint.com /browser" binaryMessenger:controller]; 
   
   __weak typeof(self) weakSelf = self; 
   [browserChannel setMethodCallHandler:^(
      FlutterMethodCall* call, FlutterResult result) { 
      
      if ([@"openBrowser" isEqualToString:call.method]) { 
         NSString *url = call.arguments[@"url"];
         [weakSelf openBrowser:url]; 
      } else { result(FlutterMethodNotImplemented); } 
   }]; 
   // custom code ends 
   [GeneratedPluginRegistrant registerWithRegistry:self]; 
   
   // Override point for customization after application launch. 
   return [super application:application didFinishLaunchingWithOptions:launchOptions]; 
}
- (void)openBrowser:(NSString *)urlString { 
   NSURL *url = [NSURL URLWithString:urlString]; 
   UIApplication *application = [UIApplication sharedApplication]; 
   [application openURL:url]; 
} 
@end
  • 프로젝트 설정을 엽니 다.

  • 이동 Capabilities 및 활성화 Background Modes.

  • 더하다 *Background fetchRemote Notification**.

  • 이제 애플리케이션을 실행하십시오. Android 버전과 유사하게 작동하지만 Chrome 대신 Safari 브라우저가 열립니다.