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 fetch 과 Remote Notification**.
이제 애플리케이션을 실행하십시오. Android 버전과 유사하게 작동하지만 Chrome 대신 Safari 브라우저가 열립니다.