SwiftUI 他のフレームワークを組み合わせると使えるView

SwiftUIの他に各種フレームワークをimportすると使えるViewやModifierです。

# MapKit
`Map`が使えます。

## サンプルコード

```swift
import SwiftUI
import MapKit

struct SwiftUIView: View {
    @State var region: MKCoordinateRegion
    var body: some View {
        Map(coordinateRegion: $region)
    }
}

struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        let initialCoordinate = CLLocationCoordinate2DMake(40,40)
        let span = MKCoordinateSpan(latitudeDelta: 0.5, longitudeDelta: 0.5)
        let region = MKCoordinateRegion(center: initialCoordinate, span: span)
        
        return SwiftUIView(region: region)
    }
}
```

## プレビュー
![スクリーンショット 2020-11-14 11.34.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62305/b1f86389-b3f2-b3a9-eba6-c023ed10c4a2.png)


# SpriteKit
`SpriteView`が使えます。
`GameScene`ファイルはXcodeプロジェクトをMultiplatformで作成した際のものを使っています。

## サンプルコード

```swift
import SwiftUI
import SpriteKit

struct SwiftUIView: View {
    let scene: SKScene
    var body: some View {
        SpriteView(scene: scene)
    }
}

struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        guard let scene = SKScene(fileNamed: "GameScene") as? GameScene else {
            abort()
        }
        scene.scaleMode = .aspectFit

        return SwiftUIView(scene: scene)
    }
}

```

## プレビュー
![スクリーンショット 2020-11-14 11.36.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62305/fb7029c1-986e-7408-599d-6427a178b254.png)


# AuthenticationServices
`SignInWithAppleButton `が使えます。
## サンプルコード


```swift
import SwiftUI
import AuthenticationServices

struct SwiftUIView: View {
    var body: some View {
        SignInWithAppleButton(.continue) { _ in
            
        } onCompletion: { _ in
            
        }
        .frame(width: 300.0, height: 44.0)
        .signInWithAppleButtonStyle(.black)
    }
}

struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        SwiftUIView()
    }
}
```

## プレビュー
![スクリーンショット 2020-11-14 11.54.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62305/cf8c792c-7e2f-0db6-f2b8-dda7848c618d.png)


# StoreKit
`appStoreOverlay`が使えます。
## サンプルコード

```swift
import SwiftUI
import StoreKit

struct SwiftUIView: View {
    @State var showOverlay:Bool = false
    var body: some View {
        Button("App Store Overlay") {
            self.showOverlay.toggle()
        }
        .appStoreOverlay(isPresented: $showOverlay) {
            SKOverlay.AppConfiguration(appIdentifier: "687721425", position: .bottom)
        }
    }
}

struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        return SwiftUIView()
    }
}

```

## プレビュー
![スクリーンショット 2020-11-14 11.46.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62305/ad35f73a-7e61-9a61-a340-8b57a5ada59c.png)


# AVKit
`VideoPlayer`が使えます。
ドキュメントには `A view that displays the video content from a player object along with system-supplied playback controls.` とあるんですが、tvOSだとコントロールが出ない感じです。

## サンプルコード

```swift
import SwiftUI
import AVKit

struct SwiftUIView: View {
    let player: AVPlayer?
    var body: some View {
        VideoPlayer(player: player)
    }
}

struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        return SwiftUIView(player: AVPlayer(url: URL(string: "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8")!))
    }
}

```

## プレビュー
![スクリーンショット 2020-11-14 11.34.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62305/a513e633-51b1-c221-3037-effaef8ca320.png)


#SceneKit
`SceneView` が使えます。scnファイルは各自用意してください。


## サンプルコード
```swift
import SwiftUI
import SceneKit

struct SwiftUIView: View {
    let scene: SCNScene?
    var body: some View {
        SceneView(scene: scene)
    }
}

struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        let scene = SCNScene(named: "Scene.scn")
        
        return SwiftUIView(scene: scene)
    }
}
```
##プレビュー
![スクリーンショット 2020-11-14 11.32.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62305/5a694bc3-aece-f366-aaea-33b875fde7c4.png)

#HomeKit
`CameraView`が使えます。
`HMCameraSource` が必要になりますが、おそらくSwiftUIプレビューでは用意できないので、各自実機でご確認ください。


## サンプルコード
```swift
import SwiftUI
import HomeKit

struct SwiftUIView: View {
    let cameraSource:HMCameraSource
    var body: some View {
        CameraView(source: cameraSource)
    }
}
```

##画像
![IMG_1F757207E2D1-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62305/30118b84-7d8a-6119-ac05-afb059411c8a.jpeg)


# WatchKit
`NowPlayingView`が使えます。

## サンプルコード

```swift
import SwiftUI
import WatchKit

struct SwiftUIView: View {
    var body: some View {
        NowPlayingView()
    }
}

struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        SwiftUIView()
    }
}
```

## プレビュー
![スクリーンショット 2020-11-14 11.39.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62305/240f725a-c8e4-f840-3421-6287160456d3.png)

# まとめ
つかおう！HomeKit！