スキル一覧に戻る
AVRA-CADAVRA

swift-integration-patterns

by AVRA-CADAVRA

0🍴 0📅 2026年1月24日
GitHubで見るManusで実行

SKILL.md


name: swift-integration-patterns description: Guides Swift integration patterns: platform channels, method channels, async callbacks, native iOS features. Use when implementing iOS-specific features, native platform channels, or Swift code integration.

Swift Integration Patterns

Core Purpose

Swift integration enables Flutter apps to use iOS-specific features via platform channels.

Method Channel Pattern

Swift Side

import Flutter
import UIKit

public class SwiftMethodChannelHandler: NSObject, FlutterPlugin {
    public static func register(with registrar: FlutterPluginRegistrar) {
        let channel = FlutterMethodChannel(
            name: "com.spots.app/methods",
            binaryMessenger: registrar.messenger()
        )
        let instance = SwiftMethodChannelHandler()
        registrar.addMethodCallDelegate(instance, channel: channel)
    }
    
    public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
        switch call.method {
        case "getPlatformVersion":
            result("iOS " + UIDevice.current.systemVersion)
        case "performNativeOperation":
            performNativeOperation(arguments: call.arguments, result: result)
        default:
            result(FlutterMethodNotImplemented)
        }
    }
    
    private func performNativeOperation(arguments: Any?, result: @escaping FlutterResult) {
        // Perform native iOS operation
        // Call result handler when complete
        result("Operation completed")
    }
}

Dart Side

import 'package:flutter/services.dart';

class PlatformChannelService {
  static const MethodChannel _channel = MethodChannel('com.spots.app/methods');
  
  Future<String> getPlatformVersion() async {
    try {
      final String version = await _channel.invokeMethod('getPlatformVersion');
      return version;
    } on PlatformException catch (e) {
      developer.log('Platform version error: ${e.message}');
      return 'Unknown';
    }
  }
  
  Future<String> performNativeOperation(Map<String, dynamic> params) async {
    try {
      final String result = await _channel.invokeMethod(
        'performNativeOperation',
        params,
      );
      return result;
    } on PlatformException catch (e) {
      developer.log('Operation error: ${e.message}');
      rethrow;
    }
  }
}

Event Channel Pattern

Swift Side

public class SwiftEventChannelHandler: NSObject, FlutterStreamHandler {
    private var eventSink: FlutterEventSink?
    
    public static func register(with registrar: FlutterPluginRegistrar) {
        let channel = FlutterEventChannel(
            name: "com.spots.app/events",
            binaryMessenger: registrar.messenger()
        )
        let handler = SwiftEventChannelHandler()
        channel.setStreamHandler(handler)
    }
    
    public func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? {
        self.eventSink = events
        startListening()
        return nil
    }
    
    public func onCancel(withArguments arguments: Any?) -> FlutterError? {
        eventSink = nil
        stopListening()
        return nil
    }
    
    private func startListening() {
        // Start native iOS listener
        // Send events via eventSink
        eventSink?("Event data")
    }
}

Dart Side

import 'package:flutter/services.dart';

class EventChannelService {
  static const EventChannel _channel = EventChannel('com.spots.app/events');
  
  Stream<String> get events {
    return _channel.receiveBroadcastStream().cast<String>();
  }
}

Async Operations

// Handle async operations
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
    switch call.method {
    case "asyncOperation":
        performAsyncOperation(result: result)
    default:
        result(FlutterMethodNotImplemented)
    }
}

private func performAsyncOperation(result: @escaping FlutterResult) {
    DispatchQueue.global().async {
        // Perform async work
        let resultData = performWork()
        
        DispatchQueue.main.async {
            // Return result on main thread
            result(resultData)
        }
    }
}

Error Handling

public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
    do {
        let resultData = try performOperation()
        result(resultData)
    } catch let error {
        result(FlutterError(
            code: "OPERATION_ERROR",
            message: error.localizedDescription,
            details: nil
        ))
    }
}

Reference

  • ios/Runner/AppDelegate.swift - iOS app delegate
  • Flutter Platform Channels documentation

スコア

総合スコア

60/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です