├── Examples
├── flip_view_example.gif
├── IOSExample
│ ├── IOSExample
│ │ ├── Assets.xcassets
│ │ │ ├── Contents.json
│ │ │ ├── AccentColor.colorset
│ │ │ │ └── Contents.json
│ │ │ └── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ ├── Preview Content
│ │ │ └── Preview Assets.xcassets
│ │ │ │ └── Contents.json
│ │ ├── IOSExampleApp.swift
│ │ ├── Info.plist
│ │ └── ContentView.swift
│ └── IOSExample.xcodeproj
│ │ └── project.pbxproj
├── MacOSExample
│ ├── MacOSExample
│ │ ├── Assets.xcassets
│ │ │ ├── Contents.json
│ │ │ ├── AccentColor.colorset
│ │ │ │ └── Contents.json
│ │ │ └── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ ├── Preview Content
│ │ │ └── Preview Assets.xcassets
│ │ │ │ └── Contents.json
│ │ ├── MacOSExample.entitlements
│ │ ├── AppDelegate.swift
│ │ ├── ContentView.swift
│ │ ├── Info.plist
│ │ └── Base.lproj
│ │ │ └── Main.storyboard
│ └── MacOSExample.xcodeproj
│ │ └── project.pbxproj
├── TvOSExample
│ ├── TvOSExample
│ │ ├── Assets.xcassets
│ │ │ ├── Contents.json
│ │ │ ├── App Icon & Top Shelf Image.brandassets
│ │ │ │ ├── App Icon.imagestack
│ │ │ │ │ ├── Back.imagestacklayer
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── Content.imageset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ ├── Front.imagestacklayer
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── Content.imageset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ ├── Middle.imagestacklayer
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── Content.imageset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── App Icon - App Store.imagestack
│ │ │ │ │ ├── Back.imagestacklayer
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── Content.imageset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ ├── Front.imagestacklayer
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── Content.imageset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ ├── Middle.imagestacklayer
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ └── Content.imageset
│ │ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Top Shelf Image.imageset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Top Shelf Image Wide.imageset
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ └── AccentColor.colorset
│ │ │ │ └── Contents.json
│ │ ├── Preview Content
│ │ │ └── Preview Assets.xcassets
│ │ │ │ └── Contents.json
│ │ ├── TvOSExampleApp.swift
│ │ ├── ContentView.swift
│ │ └── Info.plist
│ └── TvOSExample.xcodeproj
│ │ └── project.pbxproj
├── WatchOSExample
│ ├── WatchOSExample WatchKit App
│ │ ├── Assets.xcassets
│ │ │ ├── Contents.json
│ │ │ ├── AccentColor.colorset
│ │ │ │ └── Contents.json
│ │ │ └── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ └── Info.plist
│ ├── WatchOSExample WatchKit Extension
│ │ ├── Assets.xcassets
│ │ │ ├── Contents.json
│ │ │ └── Complication.complicationset
│ │ │ │ ├── Graphic Bezel.imageset
│ │ │ │ └── Contents.json
│ │ │ │ ├── Graphic Corner.imageset
│ │ │ │ └── Contents.json
│ │ │ │ ├── Graphic Circular.imageset
│ │ │ │ └── Contents.json
│ │ │ │ ├── Graphic Large Rectangular.imageset
│ │ │ │ └── Contents.json
│ │ │ │ ├── Circular.imageset
│ │ │ │ └── Contents.json
│ │ │ │ ├── Modular.imageset
│ │ │ │ └── Contents.json
│ │ │ │ ├── Extra Large.imageset
│ │ │ │ └── Contents.json
│ │ │ │ ├── Utilitarian.imageset
│ │ │ │ └── Contents.json
│ │ │ │ ├── Graphic Extra Large.imageset
│ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ ├── Preview Content
│ │ │ └── Preview Assets.xcassets
│ │ │ │ └── Contents.json
│ │ ├── WatchOSExampleApp.swift
│ │ ├── ContentView.swift
│ │ ├── Info.plist
│ │ └── ComplicationController.swift
│ └── WatchOSExample.xcodeproj
│ │ ├── xcshareddata
│ │ └── xcschemes
│ │ │ ├── WatchOSExample WatchKit App.xcscheme
│ │ │ └── WatchOSExample WatchKit App (Complication).xcscheme
│ │ └── project.pbxproj
└── Package.swift
├── Sources
└── MGFlipView
│ ├── AnimationType.swift
│ ├── FlipAxis.swift
│ ├── AnimationDescription.swift
│ └── FlipView.swift
├── Tests
├── LinuxMain.swift
└── MGFlipViewTests
│ ├── XCTestManifests.swift
│ └── FlipViewTests.swift
├── .swiftpm
└── xcode
│ ├── package.xcworkspace
│ └── contents.xcworkspacedata
│ └── xcshareddata
│ └── xcschemes
│ └── MGFlipView.xcscheme
├── MGFlipView.xcworkspace
├── xcshareddata
│ └── IDEWorkspaceChecks.plist
└── contents.xcworkspacedata
├── Package.swift
├── .gitignore
├── LICENSE
└── README.md
/Examples/flip_view_example.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zaprogramiacz/MGFlipView/HEAD/Examples/flip_view_example.gif
--------------------------------------------------------------------------------
/Examples/IOSExample/IOSExample/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Examples/MacOSExample/MacOSExample/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Sources/MGFlipView/AnimationType.swift:
--------------------------------------------------------------------------------
1 | public enum AnimationType {
2 | case linear
3 | case easeIn
4 | case easeOut
5 | case easeInOut
6 | }
7 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit App/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Examples/IOSExample/IOSExample/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Sources/MGFlipView/FlipAxis.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | public enum FlipAxis {
4 | case x
5 | case y
6 | case xy
7 | case custom(x: CGFloat, y: CGFloat)
8 | }
9 |
--------------------------------------------------------------------------------
/Tests/LinuxMain.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 |
3 | import MGFlipViewTests
4 |
5 | var tests = [XCTestCaseEntry]()
6 | tests += FlipViewTests.allTests()
7 | XCTMain(tests)
8 |
--------------------------------------------------------------------------------
/Examples/MacOSExample/MacOSExample/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit Extension/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit Extension/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/TvOSExampleApp.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | @main
4 | struct TvOSExampleApp: App {
5 | var body: some Scene {
6 | WindowGroup {
7 | ContentView()
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Tests/MGFlipViewTests/XCTestManifests.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 |
3 | #if !canImport(ObjectiveC)
4 | public func allTests() -> [XCTestCaseEntry] {
5 | return [
6 | testCase(FlipViewTests.allTests),
7 | ]
8 | }
9 | #endif
10 |
--------------------------------------------------------------------------------
/Examples/IOSExample/IOSExample/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Examples/IOSExample/IOSExample/IOSExampleApp.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 | import MGFlipView
3 |
4 | @main
5 | struct IOSExampleApp: App {
6 |
7 | var body: some Scene {
8 | WindowGroup {
9 | ContentView()
10 | }
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Examples/MacOSExample/MacOSExample/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit App/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit Extension/WatchOSExampleApp.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | @main
4 | struct WatchOSExampleApp: App {
5 | var body: some Scene {
6 | WindowGroup {
7 | NavigationView {
8 | ContentView()
9 | }
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Tests/MGFlipViewTests/FlipViewTests.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 | @testable import MGFlipView
3 |
4 | final class FlipViewTests: XCTestCase {
5 | func testExample() {
6 | XCTAssert(true == true)
7 | }
8 |
9 | static var allTests = [
10 | ("testExample", testExample),
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/Examples/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version:5.3
2 | // The swift-tools-version declares the minimum version of Swift required to build this package.
3 |
4 | import PackageDescription
5 |
6 | let package = Package(
7 | name: "Examples",
8 | products: [],
9 | dependencies: [],
10 | targets: []
11 | )
12 |
--------------------------------------------------------------------------------
/MGFlipView.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "tv"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "tv"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "tv"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Examples/MacOSExample/MacOSExample/MacOSExample.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 | com.apple.security.files.user-selected.read-only
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "tv",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "tv",
9 | "scale" : "2x"
10 | }
11 | ],
12 | "info" : {
13 | "author" : "xcode",
14 | "version" : 1
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "tv",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "tv",
9 | "scale" : "2x"
10 | }
11 | ],
12 | "info" : {
13 | "author" : "xcode",
14 | "version" : 1
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "tv",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "tv",
9 | "scale" : "2x"
10 | }
11 | ],
12 | "info" : {
13 | "author" : "xcode",
14 | "version" : 1
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | },
6 | "layers" : [
7 | {
8 | "filename" : "Front.imagestacklayer"
9 | },
10 | {
11 | "filename" : "Middle.imagestacklayer"
12 | },
13 | {
14 | "filename" : "Back.imagestacklayer"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | },
6 | "layers" : [
7 | {
8 | "filename" : "Front.imagestacklayer"
9 | },
10 | {
11 | "filename" : "Middle.imagestacklayer"
12 | },
13 | {
14 | "filename" : "Back.imagestacklayer"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/Sources/MGFlipView/AnimationDescription.swift:
--------------------------------------------------------------------------------
1 | public struct AnimationDescription {
2 |
3 | public init(type: AnimationType, duration: Double) {
4 | self.type = type
5 | self.duration = duration
6 | }
7 |
8 | let type: AnimationType
9 | let duration: Double
10 |
11 | }
12 |
13 | public extension AnimationDescription {
14 |
15 | static var `default`: AnimationDescription {
16 | .init(type: .linear, duration: 0.25)
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Bezel.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "watch",
5 | "scale" : "2x",
6 | "screen-width" : ">161"
7 | },
8 | {
9 | "idiom" : "watch",
10 | "scale" : "2x",
11 | "screen-width" : ">183"
12 | }
13 | ],
14 | "info" : {
15 | "author" : "xcode",
16 | "version" : 1
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Corner.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "watch",
5 | "scale" : "2x",
6 | "screen-width" : ">161"
7 | },
8 | {
9 | "idiom" : "watch",
10 | "scale" : "2x",
11 | "screen-width" : ">183"
12 | }
13 | ],
14 | "info" : {
15 | "author" : "xcode",
16 | "version" : 1
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Circular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "watch",
5 | "scale" : "2x",
6 | "screen-width" : ">161"
7 | },
8 | {
9 | "idiom" : "watch",
10 | "scale" : "2x",
11 | "screen-width" : ">183"
12 | }
13 | ],
14 | "info" : {
15 | "author" : "xcode",
16 | "version" : 1
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Large Rectangular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "watch",
5 | "scale" : "2x",
6 | "screen-width" : ">161"
7 | },
8 | {
9 | "idiom" : "watch",
10 | "scale" : "2x",
11 | "screen-width" : ">183"
12 | }
13 | ],
14 | "info" : {
15 | "author" : "xcode",
16 | "version" : 1
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "tv",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "tv",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "tv-marketing",
13 | "scale" : "1x"
14 | },
15 | {
16 | "idiom" : "tv-marketing",
17 | "scale" : "2x"
18 | }
19 | ],
20 | "info" : {
21 | "author" : "xcode",
22 | "version" : 1
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "tv",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "tv",
9 | "scale" : "2x"
10 | },
11 | {
12 | "idiom" : "tv-marketing",
13 | "scale" : "1x"
14 | },
15 | {
16 | "idiom" : "tv-marketing",
17 | "scale" : "2x"
18 | }
19 | ],
20 | "info" : {
21 | "author" : "xcode",
22 | "version" : 1
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version:5.3
2 | // The swift-tools-version declares the minimum version of Swift required to build this package.
3 |
4 | import PackageDescription
5 |
6 | let package = Package(
7 | name: "MGFlipView",
8 | platforms: [.iOS(.v13), .macOS(.v10_15), .tvOS(.v13), .watchOS(.v6)],
9 | products: [.library(name: "MGFlipView", targets: ["MGFlipView"])],
10 | dependencies: [],
11 | targets: [
12 | .target(name: "MGFlipView", dependencies: []),
13 | .testTarget(name: "MGFlipViewTests", dependencies: ["MGFlipView"])
14 | ]
15 | )
16 |
--------------------------------------------------------------------------------
/MGFlipView.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
12 |
13 |
15 |
16 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # OS X
2 | *.DS_Store
3 | *.swp
4 | .Trashes
5 |
6 | # Xcode
7 | *.pbxuser
8 | !default.pbxuser
9 | *.mode1v3
10 | !default.mode1v3
11 | *.mode2v3
12 | !default.mode2v3
13 | *.perspective
14 | !default.perspective
15 | *.perspectivev3
16 | !default.perspectivev3
17 | *.xcuserstate
18 | project.xcworkspace/
19 | xcuserdata/
20 | build/
21 | dist/
22 | DerivedData/
23 | *.moved-aside
24 | *.xccheckout
25 |
26 | # SPM
27 | .build/
28 |
29 | # AppCode
30 | .idea
31 |
32 | # Backup files
33 | *~
34 | *~.nib
35 | *~.xib
36 | \#*#
37 | .#*
38 |
39 | # Visual Studio Code
40 | .vscode
41 |
42 | # Build artifacts
43 | *.app.dSYM.zip
44 | *.ipa
45 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit Extension/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "watch",
5 | "scale" : "2x",
6 | "screen-width" : "<=145"
7 | },
8 | {
9 | "idiom" : "watch",
10 | "scale" : "2x",
11 | "screen-width" : ">161"
12 | },
13 | {
14 | "idiom" : "watch",
15 | "scale" : "2x",
16 | "screen-width" : ">145"
17 | },
18 | {
19 | "idiom" : "watch",
20 | "scale" : "2x",
21 | "screen-width" : ">183"
22 | }
23 | ],
24 | "info" : {
25 | "author" : "xcode",
26 | "version" : 1
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit Extension/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "watch",
5 | "scale" : "2x",
6 | "screen-width" : "<=145"
7 | },
8 | {
9 | "idiom" : "watch",
10 | "scale" : "2x",
11 | "screen-width" : ">161"
12 | },
13 | {
14 | "idiom" : "watch",
15 | "scale" : "2x",
16 | "screen-width" : ">145"
17 | },
18 | {
19 | "idiom" : "watch",
20 | "scale" : "2x",
21 | "screen-width" : ">183"
22 | }
23 | ],
24 | "info" : {
25 | "author" : "xcode",
26 | "version" : 1
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit Extension/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "watch",
5 | "scale" : "2x",
6 | "screen-width" : "<=145"
7 | },
8 | {
9 | "idiom" : "watch",
10 | "scale" : "2x",
11 | "screen-width" : ">161"
12 | },
13 | {
14 | "idiom" : "watch",
15 | "scale" : "2x",
16 | "screen-width" : ">145"
17 | },
18 | {
19 | "idiom" : "watch",
20 | "scale" : "2x",
21 | "screen-width" : ">183"
22 | }
23 | ],
24 | "info" : {
25 | "author" : "xcode",
26 | "version" : 1
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit Extension/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "watch",
5 | "scale" : "2x",
6 | "screen-width" : "<=145"
7 | },
8 | {
9 | "idiom" : "watch",
10 | "scale" : "2x",
11 | "screen-width" : ">161"
12 | },
13 | {
14 | "idiom" : "watch",
15 | "scale" : "2x",
16 | "screen-width" : ">145"
17 | },
18 | {
19 | "idiom" : "watch",
20 | "scale" : "2x",
21 | "screen-width" : ">183"
22 | }
23 | ],
24 | "info" : {
25 | "author" : "xcode",
26 | "version" : 1
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit Extension/Assets.xcassets/Complication.complicationset/Graphic Extra Large.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "watch",
5 | "scale" : "2x",
6 | "screen-width" : "<=145"
7 | },
8 | {
9 | "idiom" : "watch",
10 | "scale" : "2x",
11 | "screen-width" : ">161"
12 | },
13 | {
14 | "idiom" : "watch",
15 | "scale" : "2x",
16 | "screen-width" : ">145"
17 | },
18 | {
19 | "idiom" : "watch",
20 | "scale" : "2x",
21 | "screen-width" : ">183"
22 | }
23 | ],
24 | "info" : {
25 | "author" : "xcode",
26 | "version" : 1
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Examples/MacOSExample/MacOSExample/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import Cocoa
2 | import SwiftUI
3 |
4 | @NSApplicationMain
5 | class AppDelegate: NSObject, NSApplicationDelegate {
6 |
7 | var window: NSWindow!
8 |
9 | func applicationDidFinishLaunching(_ aNotification: Notification) {
10 | let contentView = ContentView()
11 |
12 | window = NSWindow(
13 | contentRect: NSRect(x: 0, y: 0, width: 480, height: 300),
14 | styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
15 | backing: .buffered, defer: false
16 | )
17 | window.isReleasedWhenClosed = false
18 | window.center()
19 | window.setFrameAutosaveName("Main Window")
20 | window.contentView = NSHostingView(rootView: contentView)
21 | window.makeKeyAndOrderFront(nil)
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/Examples/MacOSExample/MacOSExample/ContentView.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 | import MGFlipView
3 |
4 | struct ContentView: View {
5 |
6 | @State var flipped = false
7 |
8 | var body: some View {
9 | FlipView(frontView: {
10 | Text("?")
11 | .foregroundColor(.white)
12 | .font(.system(size: 30))
13 | .frame(width: 100, height: 100)
14 | .background(Color.gray)
15 | .mask(Circle())
16 | }, backView: {
17 | Text("🕵🏻♂️")
18 | .font(.system(size: 30))
19 | .frame(width: 100, height: 100)
20 | .background(Color.yellow)
21 | .mask(Circle())
22 | }, flipped: $flipped)
23 | .onTapGesture {
24 | flipped.toggle()
25 | }
26 | }
27 |
28 | }
29 |
30 |
31 | struct ContentView_Previews: PreviewProvider {
32 | static var previews: some View {
33 | ContentView()
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit Extension/ContentView.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 | import MGFlipView
3 |
4 | struct ContentView: View {
5 |
6 | @State var flipped = false
7 |
8 | var body: some View {
9 | FlipView(frontView: {
10 | Text("?")
11 | .foregroundColor(.white)
12 | .font(.system(size: 60))
13 | .frame(width: 80, height: 80)
14 | .background(Color.gray)
15 | .mask(Circle())
16 | }, backView: {
17 | Text("🕵🏻♂️")
18 | .font(.system(size: 60))
19 | .frame(width: 80, height: 80)
20 | .background(Color.yellow)
21 | .mask(Circle())
22 | }, flipped: $flipped)
23 | .onTapGesture {
24 | flipped.toggle()
25 | }
26 | }
27 | }
28 |
29 | struct ContentView_Previews: PreviewProvider {
30 | static var previews: some View {
31 | ContentView()
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets" : [
3 | {
4 | "filename" : "App Icon - App Store.imagestack",
5 | "idiom" : "tv",
6 | "role" : "primary-app-icon",
7 | "size" : "1280x768"
8 | },
9 | {
10 | "filename" : "App Icon.imagestack",
11 | "idiom" : "tv",
12 | "role" : "primary-app-icon",
13 | "size" : "400x240"
14 | },
15 | {
16 | "filename" : "Top Shelf Image Wide.imageset",
17 | "idiom" : "tv",
18 | "role" : "top-shelf-image-wide",
19 | "size" : "2320x720"
20 | },
21 | {
22 | "filename" : "Top Shelf Image.imageset",
23 | "idiom" : "tv",
24 | "role" : "top-shelf-image",
25 | "size" : "1920x720"
26 | }
27 | ],
28 | "info" : {
29 | "author" : "xcode",
30 | "version" : 1
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/ContentView.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 | import MGFlipView
3 |
4 | struct ContentView: View {
5 |
6 | @State var flipped = false
7 |
8 | var body: some View {
9 | VStack {
10 | FlipView(frontView: {
11 | Text("?")
12 | .foregroundColor(.white)
13 | .font(.system(size: 100))
14 | .frame(width: 150, height: 150)
15 | .background(Color.gray)
16 | .mask(Circle())
17 | }, backView: {
18 | Text("🕵🏻♂️")
19 | .font(.system(size: 100))
20 | .frame(width: 150, height: 150)
21 | .background(Color.yellow)
22 | .mask(Circle())
23 | }, flipped: $flipped)
24 | }
25 | Button(action: { flipped.toggle() }) {
26 | Text("Flip!")
27 | }
28 | }
29 |
30 |
31 | }
32 |
33 | struct ContentView_Previews: PreviewProvider {
34 | static var previews: some View {
35 | ContentView()
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchScreen
24 |
25 | UIRequiredDeviceCapabilities
26 |
27 | arm64
28 |
29 | UIUserInterfaceStyle
30 | Automatic
31 |
32 |
33 |
--------------------------------------------------------------------------------
/Examples/MacOSExample/MacOSExample/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | LSMinimumSystemVersion
24 | $(MACOSX_DEPLOYMENT_TARGET)
25 | NSMainStoryboardFile
26 | Main
27 | NSPrincipalClass
28 | NSApplication
29 |
30 |
31 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Maciej Gomółka
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit App/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | WatchOSExample WatchKit App
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | UISupportedInterfaceOrientations
24 |
25 | UIInterfaceOrientationPortrait
26 | UIInterfaceOrientationPortraitUpsideDown
27 |
28 | WKWatchKitApp
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/Examples/MacOSExample/MacOSExample/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "scale" : "1x",
6 | "size" : "16x16"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "scale" : "2x",
11 | "size" : "16x16"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "scale" : "1x",
16 | "size" : "32x32"
17 | },
18 | {
19 | "idiom" : "mac",
20 | "scale" : "2x",
21 | "size" : "32x32"
22 | },
23 | {
24 | "idiom" : "mac",
25 | "scale" : "1x",
26 | "size" : "128x128"
27 | },
28 | {
29 | "idiom" : "mac",
30 | "scale" : "2x",
31 | "size" : "128x128"
32 | },
33 | {
34 | "idiom" : "mac",
35 | "scale" : "1x",
36 | "size" : "256x256"
37 | },
38 | {
39 | "idiom" : "mac",
40 | "scale" : "2x",
41 | "size" : "256x256"
42 | },
43 | {
44 | "idiom" : "mac",
45 | "scale" : "1x",
46 | "size" : "512x512"
47 | },
48 | {
49 | "idiom" : "mac",
50 | "scale" : "2x",
51 | "size" : "512x512"
52 | }
53 | ],
54 | "info" : {
55 | "author" : "xcode",
56 | "version" : 1
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit Extension/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | WatchOSExample WatchKit Extension
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | CLKComplicationPrincipalClass
24 | $(PRODUCT_MODULE_NAME).ComplicationController
25 | NSExtension
26 |
27 | NSExtensionAttributes
28 |
29 | WKAppBundleIdentifier
30 | mg.WatchOSExample.watchkitapp
31 |
32 | NSExtensionPointIdentifier
33 | com.apple.watchkit
34 |
35 | WKWatchOnly
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit Extension/Assets.xcassets/Complication.complicationset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "assets" : [
3 | {
4 | "filename" : "Circular.imageset",
5 | "idiom" : "watch",
6 | "role" : "circular"
7 | },
8 | {
9 | "filename" : "Extra Large.imageset",
10 | "idiom" : "watch",
11 | "role" : "extra-large"
12 | },
13 | {
14 | "filename" : "Graphic Bezel.imageset",
15 | "idiom" : "watch",
16 | "role" : "graphic-bezel"
17 | },
18 | {
19 | "filename" : "Graphic Circular.imageset",
20 | "idiom" : "watch",
21 | "role" : "graphic-circular"
22 | },
23 | {
24 | "filename" : "Graphic Corner.imageset",
25 | "idiom" : "watch",
26 | "role" : "graphic-corner"
27 | },
28 | {
29 | "filename" : "Graphic Extra Large.imageset",
30 | "idiom" : "watch",
31 | "role" : "graphic-extra-large"
32 | },
33 | {
34 | "filename" : "Graphic Large Rectangular.imageset",
35 | "idiom" : "watch",
36 | "role" : "graphic-large-rectangular"
37 | },
38 | {
39 | "filename" : "Modular.imageset",
40 | "idiom" : "watch",
41 | "role" : "modular"
42 | },
43 | {
44 | "filename" : "Utilitarian.imageset",
45 | "idiom" : "watch",
46 | "role" : "utilitarian"
47 | }
48 | ],
49 | "info" : {
50 | "author" : "xcode",
51 | "version" : 1
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit Extension/ComplicationController.swift:
--------------------------------------------------------------------------------
1 | import ClockKit
2 |
3 | class ComplicationController: NSObject, CLKComplicationDataSource {
4 |
5 | func getComplicationDescriptors(handler: @escaping ([CLKComplicationDescriptor]) -> Void) {
6 | let descriptors = [
7 | CLKComplicationDescriptor(
8 | identifier: "complication",
9 | displayName: "WatchOSExample",
10 | supportedFamilies: CLKComplicationFamily.allCases
11 | )
12 | ]
13 |
14 | handler(descriptors)
15 | }
16 |
17 | func handleSharedComplicationDescriptors(_ complicationDescriptors: [CLKComplicationDescriptor]) {
18 |
19 | }
20 |
21 | func getTimelineEndDate(for complication: CLKComplication,
22 | withHandler handler: @escaping (Date?) -> Void) {
23 | handler(nil)
24 | }
25 |
26 | func getPrivacyBehavior(for complication: CLKComplication,
27 | withHandler handler: @escaping (CLKComplicationPrivacyBehavior) -> Void) {
28 | handler(.showOnLockScreen)
29 | }
30 |
31 | func getCurrentTimelineEntry(for complication: CLKComplication,
32 | withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) {
33 | handler(nil)
34 | }
35 |
36 | func getTimelineEntries(for complication: CLKComplication,
37 | after date: Date,
38 | limit: Int,
39 | withHandler handler: @escaping ([CLKComplicationTimelineEntry]?) -> Void) {
40 | handler(nil)
41 | }
42 |
43 | func getLocalizableSampleTemplate(for complication: CLKComplication,
44 | withHandler handler: @escaping (CLKComplicationTemplate?) -> Void) {
45 | handler(nil)
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/Examples/IOSExample/IOSExample/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UIApplicationSceneManifest
24 |
25 | UIApplicationSupportsMultipleScenes
26 |
27 |
28 | UIApplicationSupportsIndirectInputEvents
29 |
30 | UILaunchScreen
31 |
32 | UIRequiredDeviceCapabilities
33 |
34 | armv7
35 |
36 | UISupportedInterfaceOrientations
37 |
38 | UIInterfaceOrientationPortrait
39 | UIInterfaceOrientationLandscapeLeft
40 | UIInterfaceOrientationLandscapeRight
41 |
42 | UISupportedInterfaceOrientations~ipad
43 |
44 | UIInterfaceOrientationPortrait
45 | UIInterfaceOrientationPortraitUpsideDown
46 | UIInterfaceOrientationLandscapeLeft
47 | UIInterfaceOrientationLandscapeRight
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample WatchKit App/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "watch",
5 | "role" : "notificationCenter",
6 | "scale" : "2x",
7 | "size" : "24x24",
8 | "subtype" : "38mm"
9 | },
10 | {
11 | "idiom" : "watch",
12 | "role" : "notificationCenter",
13 | "scale" : "2x",
14 | "size" : "27.5x27.5",
15 | "subtype" : "42mm"
16 | },
17 | {
18 | "idiom" : "watch",
19 | "role" : "companionSettings",
20 | "scale" : "2x",
21 | "size" : "29x29"
22 | },
23 | {
24 | "idiom" : "watch",
25 | "role" : "companionSettings",
26 | "scale" : "3x",
27 | "size" : "29x29"
28 | },
29 | {
30 | "idiom" : "watch",
31 | "role" : "appLauncher",
32 | "scale" : "2x",
33 | "size" : "40x40",
34 | "subtype" : "38mm"
35 | },
36 | {
37 | "idiom" : "watch",
38 | "role" : "appLauncher",
39 | "scale" : "2x",
40 | "size" : "44x44",
41 | "subtype" : "40mm"
42 | },
43 | {
44 | "idiom" : "watch",
45 | "role" : "appLauncher",
46 | "scale" : "2x",
47 | "size" : "50x50",
48 | "subtype" : "44mm"
49 | },
50 | {
51 | "idiom" : "watch",
52 | "role" : "quickLook",
53 | "scale" : "2x",
54 | "size" : "86x86",
55 | "subtype" : "38mm"
56 | },
57 | {
58 | "idiom" : "watch",
59 | "role" : "quickLook",
60 | "scale" : "2x",
61 | "size" : "98x98",
62 | "subtype" : "42mm"
63 | },
64 | {
65 | "idiom" : "watch",
66 | "role" : "quickLook",
67 | "scale" : "2x",
68 | "size" : "108x108",
69 | "subtype" : "44mm"
70 | },
71 | {
72 | "idiom" : "watch-marketing",
73 | "scale" : "1x",
74 | "size" : "1024x1024"
75 | }
76 | ],
77 | "info" : {
78 | "author" : "xcode",
79 | "version" : 1
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/Examples/IOSExample/IOSExample/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "scale" : "2x",
6 | "size" : "20x20"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "scale" : "3x",
11 | "size" : "20x20"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "scale" : "2x",
16 | "size" : "29x29"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "scale" : "3x",
21 | "size" : "29x29"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "scale" : "2x",
26 | "size" : "40x40"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "scale" : "3x",
31 | "size" : "40x40"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "scale" : "2x",
36 | "size" : "60x60"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "scale" : "3x",
41 | "size" : "60x60"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "scale" : "1x",
46 | "size" : "20x20"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "scale" : "2x",
51 | "size" : "20x20"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "scale" : "1x",
56 | "size" : "29x29"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "scale" : "2x",
61 | "size" : "29x29"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "scale" : "1x",
66 | "size" : "40x40"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "scale" : "2x",
71 | "size" : "40x40"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "scale" : "1x",
76 | "size" : "76x76"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "scale" : "2x",
81 | "size" : "76x76"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "scale" : "2x",
86 | "size" : "83.5x83.5"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "scale" : "1x",
91 | "size" : "1024x1024"
92 | }
93 | ],
94 | "info" : {
95 | "author" : "xcode",
96 | "version" : 1
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MGFlipView
2 |
3 | 
4 | 
5 | 
6 |
7 | ## About
8 |
9 | If you are looking for an easy way of implement 3D flipping view, you are in the right place. MGFlipView allows to create flipping view in easy way without worring about flipping animation and flipping logic.
10 |
11 | The library is written in SwiftUI and it can be used on all platforms (iOS, macOS, watchOS, tvOS).
12 |
13 | Examples of usage for all platforms are available after opening `MGFlipView.xcworkspace`.
14 |
15 | The library is distributed via SPM.
16 |
17 | ## Preview
18 |
19 | 
20 |
21 | ## Documentation
22 |
23 | `FlipView` takes 6 arguments:
24 |
25 | | Argument | Type | Description |
26 | | --------- |:----------------------:| ------------ |
27 | | frontView | `() -> View` | Front view builder. Visible if flipped == true. |
28 | | backView | `() -> View` | Back view builder. Visible if flipped == false. |
29 | | flipped | `Binding` | Binding which gives possiblity to flip the view. |
30 | | flipAxis | `FlipAxis` | Rotation axis. `FlipAxis` have 4 defined values(`x`, `y`, `xy`, `custom(x: Double, y: Double)`). The custom value gives possiblity to declare your own axis. It has `x` default value when argument is not passed to the FlipView initializer. |
31 | | perspective | `CGFloat` | The relative vanishing point. It has 0.5 default value when argument is not passed to the FlipView initializer. |
32 | | animation | `AnimationDescription` | Defines the animation that takes place when flipping. Animation can be customized by setting duration and timing function (`linear`, `easeIn`, `easeOut`, `easeInOut`). It has `.init(type: .linear, duration: 0.25)` default value when argument is not passed to the FlipView initializer. |
33 |
34 | ```swift
35 | public init(@ViewBuilder frontView: @escaping () -> ContentFront,
36 | @ViewBuilder backView: @escaping () -> ContentBack,
37 | flipped: Binding,
38 | flipAxis: FlipAxis = .x,
39 | perspective: CGFloat = 0.5,
40 | animation: AnimationDescription = .default)
41 | ```
42 |
43 | ## Installation
44 |
45 | Use `https://github.com/Zaprogramiacz/MGFlipView.git` link to add Swift Package to Xcode project
46 |
47 | ## License
48 |
49 | [MIT License](LICENSE)
50 |
51 | Copyright (c) 2020 Maciej Gomółka
52 |
--------------------------------------------------------------------------------
/Examples/IOSExample/IOSExample/ContentView.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 | import MGFlipView
3 |
4 | struct ContentView: View {
5 |
6 | let itemSize = CGSize(width: 140, height: 140)
7 |
8 | @State var flipped: Bool = false
9 |
10 | var body: some View {
11 | VStack {
12 | HStack {
13 | flipView(flipAxis: .x, animationType: .easeIn, duration: 2, perspective: 0.1)
14 | flipView(flipAxis: .y, animationType: .easeOut, duration: 1.5, perspective: 1)
15 | }
16 | HStack {
17 | flipView(flipAxis: .xy, animationType: .easeInOut, duration: 1, perspective: 0.1)
18 | flipView(flipAxis: .custom(x: 0.1, y: 0.5), animationType: .linear, duration: 0.8, perspective: 1)
19 | }
20 | FlipView(frontView: {
21 | Text("?")
22 | .foregroundColor(.white)
23 | .font(.system(size: 30))
24 | .frame(width: itemSize.width, height: itemSize.height)
25 | .background(Color.gray)
26 | .mask(Circle())
27 | }, backView: {
28 | Text("🕵🏻♂️")
29 | .font(.system(size: 30))
30 | .frame(width: itemSize.width, height: itemSize.height)
31 | .background(Color.yellow)
32 | .mask(Circle())
33 | }, flipped: $flipped)
34 | Button(action: { flipped.toggle() }) {
35 | Text("Flip!")
36 | }
37 | }
38 | }
39 |
40 | func flipView(flipAxis: FlipAxis, animationType: AnimationType, duration: Double, perspective: CGFloat) -> some View {
41 | FlipView(
42 | frontView: { cardView(front: true, flipAxis: flipAxis, animationType: animationType, perspective: perspective) },
43 | backView: { cardView(front: false, flipAxis: flipAxis, animationType: animationType, perspective: perspective) },
44 | flipped: $flipped, flipAxis: flipAxis, animation: .init(type: animationType, duration: duration)
45 | )
46 | }
47 |
48 | func cardView(front: Bool, flipAxis: FlipAxis, animationType: AnimationType, perspective: CGFloat) -> some View {
49 | var cardSide = front ? "Front\n" : "Back\n"
50 | cardSide += "axis: \(flipAxis.humanReadable)\n"
51 | cardSide += "anim: \(animationType.humanReadable)\n"
52 | cardSide += "perspective: \(perspective)"
53 |
54 | return Text(cardSide)
55 | .frame(width: itemSize.width, height: itemSize.height)
56 | .background(Color.yellow)
57 | .cornerRadius(min(itemSize.width, itemSize.height) * 0.25)
58 | }
59 |
60 | }
61 |
62 | private extension FlipAxis {
63 |
64 | var humanReadable: String {
65 | switch self {
66 | case .x:
67 | return "x"
68 | case .y:
69 | return "y"
70 | case .xy:
71 | return "xy"
72 | case .custom(let x, let y):
73 | return "x:\(x),y:\(y)"
74 | }
75 | }
76 |
77 | }
78 |
79 | private extension AnimationType {
80 |
81 | var humanReadable: String {
82 | switch self {
83 | case .linear:
84 | return "linear"
85 | case .easeIn:
86 | return "easeIn"
87 | case .easeOut:
88 | return "easeOut"
89 | case .easeInOut:
90 | return "easeInOut"
91 | }
92 | }
93 |
94 | }
95 |
--------------------------------------------------------------------------------
/Sources/MGFlipView/FlipView.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | public struct FlipView: View {
4 |
5 | public init(@ViewBuilder frontView: @escaping () -> ContentFront,
6 | @ViewBuilder backView: @escaping () -> ContentBack,
7 | flipped: Binding,
8 | flipAxis: FlipAxis = .x,
9 | perspective: CGFloat = 0.5,
10 | animation: AnimationDescription = .default) {
11 | self.frontView = frontView
12 | self.backView = backView
13 | self._flipped = flipped
14 | self.flipAxis = flipAxis
15 | self.perspective = perspective
16 | self.animation = animation
17 | }
18 |
19 | let frontView: () -> ContentFront
20 | let backView: () -> ContentBack
21 | let flipAxis: FlipAxis
22 | let perspective: CGFloat
23 | let animation: AnimationDescription
24 |
25 | @Binding var flipped: Bool
26 |
27 | public var body: some View {
28 | ZStack {
29 | frontView()
30 | .rotation3DEffect(
31 | .init(radians: flipped ? (.pi / 2).closeValue : 0.closeValue), axis: flipAxis.value, perspective: perspective
32 | )
33 | .animation(
34 | animation.type.front(duration: animation.duration / 2, reversed: !flipped)
35 | .delay(flipped ? 0 : animation.duration / 2)
36 | )
37 | backView()
38 | .rotation3DEffect(
39 | .init(radians: flipped ? 0.closeValue : (-.pi / 2).closeValue), axis: flipAxis.value, perspective: perspective
40 | )
41 | .animation(
42 | animation.type.back(duration: animation.duration / 2, reversed: !flipped)
43 | .delay(flipped ? animation.duration / 2 : 0)
44 | )
45 | }
46 | }
47 |
48 | }
49 |
50 | private extension AnimationType {
51 |
52 | func front(duration: Double, reversed: Bool) -> Animation {
53 | switch self {
54 | case .linear:
55 | return .linear(duration: duration)
56 | case .easeOut:
57 | return reversed ? .easeOut(duration: duration) : .linear(duration: duration)
58 | case .easeIn:
59 | return reversed ? .linear(duration: duration) : .easeIn(duration: duration)
60 | case .easeInOut:
61 | return reversed ? .easeOut(duration: duration) : .easeIn(duration: duration)
62 | }
63 | }
64 |
65 | func back(duration: Double, reversed: Bool) -> Animation {
66 | switch self {
67 | case .linear:
68 | return .linear(duration: duration)
69 | case .easeIn:
70 | return reversed ? .easeIn(duration: duration) : .linear(duration: duration)
71 | case .easeOut:
72 | return reversed ? .linear(duration: duration) : .easeOut(duration: duration)
73 | case .easeInOut:
74 | return reversed ? .easeIn(duration: duration) : .easeOut(duration: duration)
75 | }
76 | }
77 |
78 | }
79 |
80 | private extension FlipAxis {
81 |
82 | var value: (x: CGFloat, y: CGFloat, z: CGFloat) {
83 | switch self {
84 | case .x:
85 | return (x: 1, y: 0, z: 0)
86 | case .y:
87 | return (x: 0, y: 1, z: 0)
88 | case .xy:
89 | return (x: 1, y: 1, z: 0)
90 | case .custom(let x, let y):
91 | return (x: x, y: y, z: 0)
92 | }
93 | }
94 |
95 | }
96 |
97 | private extension Double {
98 |
99 | var closeValue: Double {
100 | self - pow(10, -6)
101 | }
102 |
103 | }
104 |
--------------------------------------------------------------------------------
/.swiftpm/xcode/xcshareddata/xcschemes/MGFlipView.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
47 |
53 |
54 |
55 |
56 |
57 |
67 |
68 |
74 |
75 |
81 |
82 |
83 |
84 |
86 |
87 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample.xcodeproj/xcshareddata/xcschemes/WatchOSExample WatchKit App.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
46 |
47 |
57 |
61 |
67 |
68 |
69 |
70 |
76 |
80 |
86 |
87 |
88 |
89 |
95 |
96 |
97 |
98 |
100 |
101 |
104 |
105 |
106 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample.xcodeproj/xcshareddata/xcschemes/WatchOSExample WatchKit App (Complication).xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
46 |
47 |
58 |
62 |
68 |
69 |
70 |
71 |
78 |
82 |
88 |
89 |
90 |
91 |
97 |
98 |
99 |
100 |
102 |
103 |
106 |
107 |
108 |
--------------------------------------------------------------------------------
/Examples/IOSExample/IOSExample.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 52;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 4755D82E252B93990007195E /* IOSExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4755D82D252B93990007195E /* IOSExampleApp.swift */; };
11 | 4755D830252B93990007195E /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4755D82F252B93990007195E /* ContentView.swift */; };
12 | 4755D832252B939A0007195E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4755D831252B939A0007195E /* Assets.xcassets */; };
13 | 4755D835252B939A0007195E /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4755D834252B939A0007195E /* Preview Assets.xcassets */; };
14 | 4755D8DC252BA23B0007195E /* MGFlipView in Frameworks */ = {isa = PBXBuildFile; productRef = 4755D8DB252BA23B0007195E /* MGFlipView */; };
15 | /* End PBXBuildFile section */
16 |
17 | /* Begin PBXFileReference section */
18 | 4755D82A252B93990007195E /* IOSExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = IOSExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
19 | 4755D82D252B93990007195E /* IOSExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOSExampleApp.swift; sourceTree = ""; };
20 | 4755D82F252B93990007195E /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
21 | 4755D831252B939A0007195E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
22 | 4755D834252B939A0007195E /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
23 | 4755D836252B939A0007195E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
24 | /* End PBXFileReference section */
25 |
26 | /* Begin PBXFrameworksBuildPhase section */
27 | 4755D827252B93990007195E /* Frameworks */ = {
28 | isa = PBXFrameworksBuildPhase;
29 | buildActionMask = 2147483647;
30 | files = (
31 | 4755D8DC252BA23B0007195E /* MGFlipView in Frameworks */,
32 | );
33 | runOnlyForDeploymentPostprocessing = 0;
34 | };
35 | /* End PBXFrameworksBuildPhase section */
36 |
37 | /* Begin PBXGroup section */
38 | 4755D821252B93990007195E = {
39 | isa = PBXGroup;
40 | children = (
41 | 4755D82C252B93990007195E /* IOSExample */,
42 | 4755D82B252B93990007195E /* Products */,
43 | 4755D8DA252BA23B0007195E /* Frameworks */,
44 | );
45 | sourceTree = "";
46 | };
47 | 4755D82B252B93990007195E /* Products */ = {
48 | isa = PBXGroup;
49 | children = (
50 | 4755D82A252B93990007195E /* IOSExample.app */,
51 | );
52 | name = Products;
53 | sourceTree = "";
54 | };
55 | 4755D82C252B93990007195E /* IOSExample */ = {
56 | isa = PBXGroup;
57 | children = (
58 | 4755D82D252B93990007195E /* IOSExampleApp.swift */,
59 | 4755D82F252B93990007195E /* ContentView.swift */,
60 | 4755D831252B939A0007195E /* Assets.xcassets */,
61 | 4755D836252B939A0007195E /* Info.plist */,
62 | 4755D833252B939A0007195E /* Preview Content */,
63 | );
64 | path = IOSExample;
65 | sourceTree = "";
66 | };
67 | 4755D833252B939A0007195E /* Preview Content */ = {
68 | isa = PBXGroup;
69 | children = (
70 | 4755D834252B939A0007195E /* Preview Assets.xcassets */,
71 | );
72 | path = "Preview Content";
73 | sourceTree = "";
74 | };
75 | 4755D8DA252BA23B0007195E /* Frameworks */ = {
76 | isa = PBXGroup;
77 | children = (
78 | );
79 | name = Frameworks;
80 | sourceTree = "";
81 | };
82 | /* End PBXGroup section */
83 |
84 | /* Begin PBXNativeTarget section */
85 | 4755D829252B93990007195E /* IOSExample */ = {
86 | isa = PBXNativeTarget;
87 | buildConfigurationList = 4755D839252B939A0007195E /* Build configuration list for PBXNativeTarget "IOSExample" */;
88 | buildPhases = (
89 | 4755D826252B93990007195E /* Sources */,
90 | 4755D827252B93990007195E /* Frameworks */,
91 | 4755D828252B93990007195E /* Resources */,
92 | );
93 | buildRules = (
94 | );
95 | dependencies = (
96 | );
97 | name = IOSExample;
98 | packageProductDependencies = (
99 | 4755D8DB252BA23B0007195E /* MGFlipView */,
100 | );
101 | productName = IOSExample;
102 | productReference = 4755D82A252B93990007195E /* IOSExample.app */;
103 | productType = "com.apple.product-type.application";
104 | };
105 | /* End PBXNativeTarget section */
106 |
107 | /* Begin PBXProject section */
108 | 4755D822252B93990007195E /* Project object */ = {
109 | isa = PBXProject;
110 | attributes = {
111 | LastSwiftUpdateCheck = 1200;
112 | LastUpgradeCheck = 1200;
113 | TargetAttributes = {
114 | 4755D829252B93990007195E = {
115 | CreatedOnToolsVersion = 12.0;
116 | };
117 | };
118 | };
119 | buildConfigurationList = 4755D825252B93990007195E /* Build configuration list for PBXProject "IOSExample" */;
120 | compatibilityVersion = "Xcode 9.3";
121 | developmentRegion = en;
122 | hasScannedForEncodings = 0;
123 | knownRegions = (
124 | en,
125 | Base,
126 | );
127 | mainGroup = 4755D821252B93990007195E;
128 | productRefGroup = 4755D82B252B93990007195E /* Products */;
129 | projectDirPath = "";
130 | projectRoot = "";
131 | targets = (
132 | 4755D829252B93990007195E /* IOSExample */,
133 | );
134 | };
135 | /* End PBXProject section */
136 |
137 | /* Begin PBXResourcesBuildPhase section */
138 | 4755D828252B93990007195E /* Resources */ = {
139 | isa = PBXResourcesBuildPhase;
140 | buildActionMask = 2147483647;
141 | files = (
142 | 4755D835252B939A0007195E /* Preview Assets.xcassets in Resources */,
143 | 4755D832252B939A0007195E /* Assets.xcassets in Resources */,
144 | );
145 | runOnlyForDeploymentPostprocessing = 0;
146 | };
147 | /* End PBXResourcesBuildPhase section */
148 |
149 | /* Begin PBXSourcesBuildPhase section */
150 | 4755D826252B93990007195E /* Sources */ = {
151 | isa = PBXSourcesBuildPhase;
152 | buildActionMask = 2147483647;
153 | files = (
154 | 4755D830252B93990007195E /* ContentView.swift in Sources */,
155 | 4755D82E252B93990007195E /* IOSExampleApp.swift in Sources */,
156 | );
157 | runOnlyForDeploymentPostprocessing = 0;
158 | };
159 | /* End PBXSourcesBuildPhase section */
160 |
161 | /* Begin XCBuildConfiguration section */
162 | 4755D837252B939A0007195E /* Debug */ = {
163 | isa = XCBuildConfiguration;
164 | buildSettings = {
165 | ALWAYS_SEARCH_USER_PATHS = NO;
166 | CLANG_ANALYZER_NONNULL = YES;
167 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
168 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
169 | CLANG_CXX_LIBRARY = "libc++";
170 | CLANG_ENABLE_MODULES = YES;
171 | CLANG_ENABLE_OBJC_ARC = YES;
172 | CLANG_ENABLE_OBJC_WEAK = YES;
173 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
174 | CLANG_WARN_BOOL_CONVERSION = YES;
175 | CLANG_WARN_COMMA = YES;
176 | CLANG_WARN_CONSTANT_CONVERSION = YES;
177 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
178 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
179 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
180 | CLANG_WARN_EMPTY_BODY = YES;
181 | CLANG_WARN_ENUM_CONVERSION = YES;
182 | CLANG_WARN_INFINITE_RECURSION = YES;
183 | CLANG_WARN_INT_CONVERSION = YES;
184 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
185 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
186 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
187 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
188 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
189 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
190 | CLANG_WARN_STRICT_PROTOTYPES = YES;
191 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
192 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
193 | CLANG_WARN_UNREACHABLE_CODE = YES;
194 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
195 | COPY_PHASE_STRIP = NO;
196 | DEBUG_INFORMATION_FORMAT = dwarf;
197 | ENABLE_STRICT_OBJC_MSGSEND = YES;
198 | ENABLE_TESTABILITY = YES;
199 | GCC_C_LANGUAGE_STANDARD = gnu11;
200 | GCC_DYNAMIC_NO_PIC = NO;
201 | GCC_NO_COMMON_BLOCKS = YES;
202 | GCC_OPTIMIZATION_LEVEL = 0;
203 | GCC_PREPROCESSOR_DEFINITIONS = (
204 | "DEBUG=1",
205 | "$(inherited)",
206 | );
207 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
208 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
209 | GCC_WARN_UNDECLARED_SELECTOR = YES;
210 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
211 | GCC_WARN_UNUSED_FUNCTION = YES;
212 | GCC_WARN_UNUSED_VARIABLE = YES;
213 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
214 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
215 | MTL_FAST_MATH = YES;
216 | ONLY_ACTIVE_ARCH = YES;
217 | SDKROOT = iphoneos;
218 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
219 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
220 | };
221 | name = Debug;
222 | };
223 | 4755D838252B939A0007195E /* Release */ = {
224 | isa = XCBuildConfiguration;
225 | buildSettings = {
226 | ALWAYS_SEARCH_USER_PATHS = NO;
227 | CLANG_ANALYZER_NONNULL = YES;
228 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
229 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
230 | CLANG_CXX_LIBRARY = "libc++";
231 | CLANG_ENABLE_MODULES = YES;
232 | CLANG_ENABLE_OBJC_ARC = YES;
233 | CLANG_ENABLE_OBJC_WEAK = YES;
234 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
235 | CLANG_WARN_BOOL_CONVERSION = YES;
236 | CLANG_WARN_COMMA = YES;
237 | CLANG_WARN_CONSTANT_CONVERSION = YES;
238 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
239 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
240 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
241 | CLANG_WARN_EMPTY_BODY = YES;
242 | CLANG_WARN_ENUM_CONVERSION = YES;
243 | CLANG_WARN_INFINITE_RECURSION = YES;
244 | CLANG_WARN_INT_CONVERSION = YES;
245 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
246 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
247 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
248 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
249 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
250 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
251 | CLANG_WARN_STRICT_PROTOTYPES = YES;
252 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
253 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
254 | CLANG_WARN_UNREACHABLE_CODE = YES;
255 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
256 | COPY_PHASE_STRIP = NO;
257 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
258 | ENABLE_NS_ASSERTIONS = NO;
259 | ENABLE_STRICT_OBJC_MSGSEND = YES;
260 | GCC_C_LANGUAGE_STANDARD = gnu11;
261 | GCC_NO_COMMON_BLOCKS = YES;
262 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
263 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
264 | GCC_WARN_UNDECLARED_SELECTOR = YES;
265 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
266 | GCC_WARN_UNUSED_FUNCTION = YES;
267 | GCC_WARN_UNUSED_VARIABLE = YES;
268 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
269 | MTL_ENABLE_DEBUG_INFO = NO;
270 | MTL_FAST_MATH = YES;
271 | SDKROOT = iphoneos;
272 | SWIFT_COMPILATION_MODE = wholemodule;
273 | SWIFT_OPTIMIZATION_LEVEL = "-O";
274 | VALIDATE_PRODUCT = YES;
275 | };
276 | name = Release;
277 | };
278 | 4755D83A252B939A0007195E /* Debug */ = {
279 | isa = XCBuildConfiguration;
280 | buildSettings = {
281 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
282 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
283 | CODE_SIGN_STYLE = Automatic;
284 | DEVELOPMENT_ASSET_PATHS = "\"IOSExample/Preview Content\"";
285 | DEVELOPMENT_TEAM = TC4LDUY2D5;
286 | ENABLE_PREVIEWS = YES;
287 | INFOPLIST_FILE = IOSExample/Info.plist;
288 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
289 | LD_RUNPATH_SEARCH_PATHS = (
290 | "$(inherited)",
291 | "@executable_path/Frameworks",
292 | );
293 | PRODUCT_BUNDLE_IDENTIFIER = mg.IOSExample;
294 | PRODUCT_NAME = "$(TARGET_NAME)";
295 | SWIFT_VERSION = 5.0;
296 | TARGETED_DEVICE_FAMILY = "1,2";
297 | };
298 | name = Debug;
299 | };
300 | 4755D83B252B939A0007195E /* Release */ = {
301 | isa = XCBuildConfiguration;
302 | buildSettings = {
303 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
304 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
305 | CODE_SIGN_STYLE = Automatic;
306 | DEVELOPMENT_ASSET_PATHS = "\"IOSExample/Preview Content\"";
307 | DEVELOPMENT_TEAM = TC4LDUY2D5;
308 | ENABLE_PREVIEWS = YES;
309 | INFOPLIST_FILE = IOSExample/Info.plist;
310 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
311 | LD_RUNPATH_SEARCH_PATHS = (
312 | "$(inherited)",
313 | "@executable_path/Frameworks",
314 | );
315 | PRODUCT_BUNDLE_IDENTIFIER = mg.IOSExample;
316 | PRODUCT_NAME = "$(TARGET_NAME)";
317 | SWIFT_VERSION = 5.0;
318 | TARGETED_DEVICE_FAMILY = "1,2";
319 | };
320 | name = Release;
321 | };
322 | /* End XCBuildConfiguration section */
323 |
324 | /* Begin XCConfigurationList section */
325 | 4755D825252B93990007195E /* Build configuration list for PBXProject "IOSExample" */ = {
326 | isa = XCConfigurationList;
327 | buildConfigurations = (
328 | 4755D837252B939A0007195E /* Debug */,
329 | 4755D838252B939A0007195E /* Release */,
330 | );
331 | defaultConfigurationIsVisible = 0;
332 | defaultConfigurationName = Release;
333 | };
334 | 4755D839252B939A0007195E /* Build configuration list for PBXNativeTarget "IOSExample" */ = {
335 | isa = XCConfigurationList;
336 | buildConfigurations = (
337 | 4755D83A252B939A0007195E /* Debug */,
338 | 4755D83B252B939A0007195E /* Release */,
339 | );
340 | defaultConfigurationIsVisible = 0;
341 | defaultConfigurationName = Release;
342 | };
343 | /* End XCConfigurationList section */
344 |
345 | /* Begin XCSwiftPackageProductDependency section */
346 | 4755D8DB252BA23B0007195E /* MGFlipView */ = {
347 | isa = XCSwiftPackageProductDependency;
348 | productName = MGFlipView;
349 | };
350 | /* End XCSwiftPackageProductDependency section */
351 | };
352 | rootObject = 4755D822252B93990007195E /* Project object */;
353 | }
354 |
--------------------------------------------------------------------------------
/Examples/TvOSExample/TvOSExample.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 52;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 473A8E19252BBBB7009264D0 /* MGFlipView in Frameworks */ = {isa = PBXBuildFile; productRef = 473A8E18252BBBB7009264D0 /* MGFlipView */; };
11 | 4755D8A3252B94DE0007195E /* TvOSExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4755D8A2252B94DE0007195E /* TvOSExampleApp.swift */; };
12 | 4755D8A5252B94DE0007195E /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4755D8A4252B94DE0007195E /* ContentView.swift */; };
13 | 4755D8A7252B94DF0007195E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4755D8A6252B94DF0007195E /* Assets.xcassets */; };
14 | 4755D8AA252B94DF0007195E /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4755D8A9252B94DF0007195E /* Preview Assets.xcassets */; };
15 | /* End PBXBuildFile section */
16 |
17 | /* Begin PBXFileReference section */
18 | 4755D89F252B94DE0007195E /* TvOSExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TvOSExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
19 | 4755D8A2252B94DE0007195E /* TvOSExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TvOSExampleApp.swift; sourceTree = ""; };
20 | 4755D8A4252B94DE0007195E /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
21 | 4755D8A6252B94DF0007195E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
22 | 4755D8A9252B94DF0007195E /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
23 | 4755D8AB252B94DF0007195E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
24 | /* End PBXFileReference section */
25 |
26 | /* Begin PBXFrameworksBuildPhase section */
27 | 4755D89C252B94DE0007195E /* Frameworks */ = {
28 | isa = PBXFrameworksBuildPhase;
29 | buildActionMask = 2147483647;
30 | files = (
31 | 473A8E19252BBBB7009264D0 /* MGFlipView in Frameworks */,
32 | );
33 | runOnlyForDeploymentPostprocessing = 0;
34 | };
35 | /* End PBXFrameworksBuildPhase section */
36 |
37 | /* Begin PBXGroup section */
38 | 473A8E17252BBBB7009264D0 /* Frameworks */ = {
39 | isa = PBXGroup;
40 | children = (
41 | );
42 | name = Frameworks;
43 | sourceTree = "";
44 | };
45 | 4755D896252B94DE0007195E = {
46 | isa = PBXGroup;
47 | children = (
48 | 4755D8A1252B94DE0007195E /* TvOSExample */,
49 | 4755D8A0252B94DE0007195E /* Products */,
50 | 473A8E17252BBBB7009264D0 /* Frameworks */,
51 | );
52 | sourceTree = "";
53 | };
54 | 4755D8A0252B94DE0007195E /* Products */ = {
55 | isa = PBXGroup;
56 | children = (
57 | 4755D89F252B94DE0007195E /* TvOSExample.app */,
58 | );
59 | name = Products;
60 | sourceTree = "";
61 | };
62 | 4755D8A1252B94DE0007195E /* TvOSExample */ = {
63 | isa = PBXGroup;
64 | children = (
65 | 4755D8A2252B94DE0007195E /* TvOSExampleApp.swift */,
66 | 4755D8A4252B94DE0007195E /* ContentView.swift */,
67 | 4755D8A6252B94DF0007195E /* Assets.xcassets */,
68 | 4755D8AB252B94DF0007195E /* Info.plist */,
69 | 4755D8A8252B94DF0007195E /* Preview Content */,
70 | );
71 | path = TvOSExample;
72 | sourceTree = "";
73 | };
74 | 4755D8A8252B94DF0007195E /* Preview Content */ = {
75 | isa = PBXGroup;
76 | children = (
77 | 4755D8A9252B94DF0007195E /* Preview Assets.xcassets */,
78 | );
79 | path = "Preview Content";
80 | sourceTree = "";
81 | };
82 | /* End PBXGroup section */
83 |
84 | /* Begin PBXNativeTarget section */
85 | 4755D89E252B94DE0007195E /* TvOSExample */ = {
86 | isa = PBXNativeTarget;
87 | buildConfigurationList = 4755D8AE252B94DF0007195E /* Build configuration list for PBXNativeTarget "TvOSExample" */;
88 | buildPhases = (
89 | 4755D89B252B94DE0007195E /* Sources */,
90 | 4755D89C252B94DE0007195E /* Frameworks */,
91 | 4755D89D252B94DE0007195E /* Resources */,
92 | );
93 | buildRules = (
94 | );
95 | dependencies = (
96 | );
97 | name = TvOSExample;
98 | packageProductDependencies = (
99 | 473A8E18252BBBB7009264D0 /* MGFlipView */,
100 | );
101 | productName = TvOSExample;
102 | productReference = 4755D89F252B94DE0007195E /* TvOSExample.app */;
103 | productType = "com.apple.product-type.application";
104 | };
105 | /* End PBXNativeTarget section */
106 |
107 | /* Begin PBXProject section */
108 | 4755D897252B94DE0007195E /* Project object */ = {
109 | isa = PBXProject;
110 | attributes = {
111 | LastSwiftUpdateCheck = 1200;
112 | LastUpgradeCheck = 1200;
113 | TargetAttributes = {
114 | 4755D89E252B94DE0007195E = {
115 | CreatedOnToolsVersion = 12.0;
116 | };
117 | };
118 | };
119 | buildConfigurationList = 4755D89A252B94DE0007195E /* Build configuration list for PBXProject "TvOSExample" */;
120 | compatibilityVersion = "Xcode 9.3";
121 | developmentRegion = en;
122 | hasScannedForEncodings = 0;
123 | knownRegions = (
124 | en,
125 | Base,
126 | );
127 | mainGroup = 4755D896252B94DE0007195E;
128 | productRefGroup = 4755D8A0252B94DE0007195E /* Products */;
129 | projectDirPath = "";
130 | projectRoot = "";
131 | targets = (
132 | 4755D89E252B94DE0007195E /* TvOSExample */,
133 | );
134 | };
135 | /* End PBXProject section */
136 |
137 | /* Begin PBXResourcesBuildPhase section */
138 | 4755D89D252B94DE0007195E /* Resources */ = {
139 | isa = PBXResourcesBuildPhase;
140 | buildActionMask = 2147483647;
141 | files = (
142 | 4755D8AA252B94DF0007195E /* Preview Assets.xcassets in Resources */,
143 | 4755D8A7252B94DF0007195E /* Assets.xcassets in Resources */,
144 | );
145 | runOnlyForDeploymentPostprocessing = 0;
146 | };
147 | /* End PBXResourcesBuildPhase section */
148 |
149 | /* Begin PBXSourcesBuildPhase section */
150 | 4755D89B252B94DE0007195E /* Sources */ = {
151 | isa = PBXSourcesBuildPhase;
152 | buildActionMask = 2147483647;
153 | files = (
154 | 4755D8A5252B94DE0007195E /* ContentView.swift in Sources */,
155 | 4755D8A3252B94DE0007195E /* TvOSExampleApp.swift in Sources */,
156 | );
157 | runOnlyForDeploymentPostprocessing = 0;
158 | };
159 | /* End PBXSourcesBuildPhase section */
160 |
161 | /* Begin XCBuildConfiguration section */
162 | 4755D8AC252B94DF0007195E /* Debug */ = {
163 | isa = XCBuildConfiguration;
164 | buildSettings = {
165 | ALWAYS_SEARCH_USER_PATHS = NO;
166 | CLANG_ANALYZER_NONNULL = YES;
167 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
168 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
169 | CLANG_CXX_LIBRARY = "libc++";
170 | CLANG_ENABLE_MODULES = YES;
171 | CLANG_ENABLE_OBJC_ARC = YES;
172 | CLANG_ENABLE_OBJC_WEAK = YES;
173 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
174 | CLANG_WARN_BOOL_CONVERSION = YES;
175 | CLANG_WARN_COMMA = YES;
176 | CLANG_WARN_CONSTANT_CONVERSION = YES;
177 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
178 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
179 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
180 | CLANG_WARN_EMPTY_BODY = YES;
181 | CLANG_WARN_ENUM_CONVERSION = YES;
182 | CLANG_WARN_INFINITE_RECURSION = YES;
183 | CLANG_WARN_INT_CONVERSION = YES;
184 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
185 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
186 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
187 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
188 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
189 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
190 | CLANG_WARN_STRICT_PROTOTYPES = YES;
191 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
192 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
193 | CLANG_WARN_UNREACHABLE_CODE = YES;
194 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
195 | COPY_PHASE_STRIP = NO;
196 | DEBUG_INFORMATION_FORMAT = dwarf;
197 | ENABLE_STRICT_OBJC_MSGSEND = YES;
198 | ENABLE_TESTABILITY = YES;
199 | GCC_C_LANGUAGE_STANDARD = gnu11;
200 | GCC_DYNAMIC_NO_PIC = NO;
201 | GCC_NO_COMMON_BLOCKS = YES;
202 | GCC_OPTIMIZATION_LEVEL = 0;
203 | GCC_PREPROCESSOR_DEFINITIONS = (
204 | "DEBUG=1",
205 | "$(inherited)",
206 | );
207 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
208 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
209 | GCC_WARN_UNDECLARED_SELECTOR = YES;
210 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
211 | GCC_WARN_UNUSED_FUNCTION = YES;
212 | GCC_WARN_UNUSED_VARIABLE = YES;
213 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
214 | MTL_FAST_MATH = YES;
215 | ONLY_ACTIVE_ARCH = YES;
216 | SDKROOT = appletvos;
217 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
218 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
219 | TVOS_DEPLOYMENT_TARGET = 14.0;
220 | };
221 | name = Debug;
222 | };
223 | 4755D8AD252B94DF0007195E /* Release */ = {
224 | isa = XCBuildConfiguration;
225 | buildSettings = {
226 | ALWAYS_SEARCH_USER_PATHS = NO;
227 | CLANG_ANALYZER_NONNULL = YES;
228 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
229 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
230 | CLANG_CXX_LIBRARY = "libc++";
231 | CLANG_ENABLE_MODULES = YES;
232 | CLANG_ENABLE_OBJC_ARC = YES;
233 | CLANG_ENABLE_OBJC_WEAK = YES;
234 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
235 | CLANG_WARN_BOOL_CONVERSION = YES;
236 | CLANG_WARN_COMMA = YES;
237 | CLANG_WARN_CONSTANT_CONVERSION = YES;
238 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
239 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
240 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
241 | CLANG_WARN_EMPTY_BODY = YES;
242 | CLANG_WARN_ENUM_CONVERSION = YES;
243 | CLANG_WARN_INFINITE_RECURSION = YES;
244 | CLANG_WARN_INT_CONVERSION = YES;
245 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
246 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
247 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
248 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
249 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
250 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
251 | CLANG_WARN_STRICT_PROTOTYPES = YES;
252 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
253 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
254 | CLANG_WARN_UNREACHABLE_CODE = YES;
255 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
256 | COPY_PHASE_STRIP = NO;
257 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
258 | ENABLE_NS_ASSERTIONS = NO;
259 | ENABLE_STRICT_OBJC_MSGSEND = YES;
260 | GCC_C_LANGUAGE_STANDARD = gnu11;
261 | GCC_NO_COMMON_BLOCKS = YES;
262 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
263 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
264 | GCC_WARN_UNDECLARED_SELECTOR = YES;
265 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
266 | GCC_WARN_UNUSED_FUNCTION = YES;
267 | GCC_WARN_UNUSED_VARIABLE = YES;
268 | MTL_ENABLE_DEBUG_INFO = NO;
269 | MTL_FAST_MATH = YES;
270 | SDKROOT = appletvos;
271 | SWIFT_COMPILATION_MODE = wholemodule;
272 | SWIFT_OPTIMIZATION_LEVEL = "-O";
273 | TVOS_DEPLOYMENT_TARGET = 14.0;
274 | VALIDATE_PRODUCT = YES;
275 | };
276 | name = Release;
277 | };
278 | 4755D8AF252B94DF0007195E /* Debug */ = {
279 | isa = XCBuildConfiguration;
280 | buildSettings = {
281 | ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
282 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
283 | CODE_SIGN_STYLE = Automatic;
284 | DEVELOPMENT_ASSET_PATHS = "\"TvOSExample/Preview Content\"";
285 | DEVELOPMENT_TEAM = TC4LDUY2D5;
286 | ENABLE_PREVIEWS = YES;
287 | INFOPLIST_FILE = TvOSExample/Info.plist;
288 | LD_RUNPATH_SEARCH_PATHS = (
289 | "$(inherited)",
290 | "@executable_path/Frameworks",
291 | );
292 | PRODUCT_BUNDLE_IDENTIFIER = mg.TvOSExample;
293 | PRODUCT_NAME = "$(TARGET_NAME)";
294 | SWIFT_VERSION = 5.0;
295 | TARGETED_DEVICE_FAMILY = 3;
296 | TVOS_DEPLOYMENT_TARGET = 14.0;
297 | };
298 | name = Debug;
299 | };
300 | 4755D8B0252B94DF0007195E /* Release */ = {
301 | isa = XCBuildConfiguration;
302 | buildSettings = {
303 | ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
304 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
305 | CODE_SIGN_STYLE = Automatic;
306 | DEVELOPMENT_ASSET_PATHS = "\"TvOSExample/Preview Content\"";
307 | DEVELOPMENT_TEAM = TC4LDUY2D5;
308 | ENABLE_PREVIEWS = YES;
309 | INFOPLIST_FILE = TvOSExample/Info.plist;
310 | LD_RUNPATH_SEARCH_PATHS = (
311 | "$(inherited)",
312 | "@executable_path/Frameworks",
313 | );
314 | PRODUCT_BUNDLE_IDENTIFIER = mg.TvOSExample;
315 | PRODUCT_NAME = "$(TARGET_NAME)";
316 | SWIFT_VERSION = 5.0;
317 | TARGETED_DEVICE_FAMILY = 3;
318 | TVOS_DEPLOYMENT_TARGET = 14.0;
319 | };
320 | name = Release;
321 | };
322 | /* End XCBuildConfiguration section */
323 |
324 | /* Begin XCConfigurationList section */
325 | 4755D89A252B94DE0007195E /* Build configuration list for PBXProject "TvOSExample" */ = {
326 | isa = XCConfigurationList;
327 | buildConfigurations = (
328 | 4755D8AC252B94DF0007195E /* Debug */,
329 | 4755D8AD252B94DF0007195E /* Release */,
330 | );
331 | defaultConfigurationIsVisible = 0;
332 | defaultConfigurationName = Release;
333 | };
334 | 4755D8AE252B94DF0007195E /* Build configuration list for PBXNativeTarget "TvOSExample" */ = {
335 | isa = XCConfigurationList;
336 | buildConfigurations = (
337 | 4755D8AF252B94DF0007195E /* Debug */,
338 | 4755D8B0252B94DF0007195E /* Release */,
339 | );
340 | defaultConfigurationIsVisible = 0;
341 | defaultConfigurationName = Release;
342 | };
343 | /* End XCConfigurationList section */
344 |
345 | /* Begin XCSwiftPackageProductDependency section */
346 | 473A8E18252BBBB7009264D0 /* MGFlipView */ = {
347 | isa = XCSwiftPackageProductDependency;
348 | productName = MGFlipView;
349 | };
350 | /* End XCSwiftPackageProductDependency section */
351 | };
352 | rootObject = 4755D897252B94DE0007195E /* Project object */;
353 | }
354 |
--------------------------------------------------------------------------------
/Examples/MacOSExample/MacOSExample.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 52;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 473A8E23252BBE24009264D0 /* MGFlipView in Frameworks */ = {isa = PBXBuildFile; productRef = 473A8E22252BBE24009264D0 /* MGFlipView */; };
11 | 4755D8C4252B97A70007195E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4755D8C3252B97A70007195E /* AppDelegate.swift */; };
12 | 4755D8C6252B97A70007195E /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4755D8C5252B97A70007195E /* ContentView.swift */; };
13 | 4755D8C8252B97A80007195E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4755D8C7252B97A80007195E /* Assets.xcassets */; };
14 | 4755D8CB252B97A80007195E /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4755D8CA252B97A80007195E /* Preview Assets.xcassets */; };
15 | 4755D8CE252B97A80007195E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4755D8CC252B97A80007195E /* Main.storyboard */; };
16 | /* End PBXBuildFile section */
17 |
18 | /* Begin PBXFileReference section */
19 | 4755D8C0252B97A70007195E /* MacOSExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MacOSExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
20 | 4755D8C3252B97A70007195E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
21 | 4755D8C5252B97A70007195E /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
22 | 4755D8C7252B97A80007195E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
23 | 4755D8CA252B97A80007195E /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
24 | 4755D8CD252B97A80007195E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
25 | 4755D8CF252B97A80007195E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
26 | 4755D8D0252B97A80007195E /* MacOSExample.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = MacOSExample.entitlements; sourceTree = ""; };
27 | /* End PBXFileReference section */
28 |
29 | /* Begin PBXFrameworksBuildPhase section */
30 | 4755D8BD252B97A70007195E /* Frameworks */ = {
31 | isa = PBXFrameworksBuildPhase;
32 | buildActionMask = 2147483647;
33 | files = (
34 | 473A8E23252BBE24009264D0 /* MGFlipView in Frameworks */,
35 | );
36 | runOnlyForDeploymentPostprocessing = 0;
37 | };
38 | /* End PBXFrameworksBuildPhase section */
39 |
40 | /* Begin PBXGroup section */
41 | 473A8E21252BBE24009264D0 /* Frameworks */ = {
42 | isa = PBXGroup;
43 | children = (
44 | );
45 | name = Frameworks;
46 | sourceTree = "";
47 | };
48 | 4755D8B7252B97A70007195E = {
49 | isa = PBXGroup;
50 | children = (
51 | 4755D8C2252B97A70007195E /* MacOSExample */,
52 | 4755D8C1252B97A70007195E /* Products */,
53 | 473A8E21252BBE24009264D0 /* Frameworks */,
54 | );
55 | sourceTree = "";
56 | };
57 | 4755D8C1252B97A70007195E /* Products */ = {
58 | isa = PBXGroup;
59 | children = (
60 | 4755D8C0252B97A70007195E /* MacOSExample.app */,
61 | );
62 | name = Products;
63 | sourceTree = "";
64 | };
65 | 4755D8C2252B97A70007195E /* MacOSExample */ = {
66 | isa = PBXGroup;
67 | children = (
68 | 4755D8C3252B97A70007195E /* AppDelegate.swift */,
69 | 4755D8C5252B97A70007195E /* ContentView.swift */,
70 | 4755D8C7252B97A80007195E /* Assets.xcassets */,
71 | 4755D8CC252B97A80007195E /* Main.storyboard */,
72 | 4755D8CF252B97A80007195E /* Info.plist */,
73 | 4755D8D0252B97A80007195E /* MacOSExample.entitlements */,
74 | 4755D8C9252B97A80007195E /* Preview Content */,
75 | );
76 | path = MacOSExample;
77 | sourceTree = "";
78 | };
79 | 4755D8C9252B97A80007195E /* Preview Content */ = {
80 | isa = PBXGroup;
81 | children = (
82 | 4755D8CA252B97A80007195E /* Preview Assets.xcassets */,
83 | );
84 | path = "Preview Content";
85 | sourceTree = "";
86 | };
87 | /* End PBXGroup section */
88 |
89 | /* Begin PBXNativeTarget section */
90 | 4755D8BF252B97A70007195E /* MacOSExample */ = {
91 | isa = PBXNativeTarget;
92 | buildConfigurationList = 4755D8D3252B97A80007195E /* Build configuration list for PBXNativeTarget "MacOSExample" */;
93 | buildPhases = (
94 | 4755D8BC252B97A70007195E /* Sources */,
95 | 4755D8BD252B97A70007195E /* Frameworks */,
96 | 4755D8BE252B97A70007195E /* Resources */,
97 | );
98 | buildRules = (
99 | );
100 | dependencies = (
101 | );
102 | name = MacOSExample;
103 | packageProductDependencies = (
104 | 473A8E22252BBE24009264D0 /* MGFlipView */,
105 | );
106 | productName = MacOSExample;
107 | productReference = 4755D8C0252B97A70007195E /* MacOSExample.app */;
108 | productType = "com.apple.product-type.application";
109 | };
110 | /* End PBXNativeTarget section */
111 |
112 | /* Begin PBXProject section */
113 | 4755D8B8252B97A70007195E /* Project object */ = {
114 | isa = PBXProject;
115 | attributes = {
116 | LastSwiftUpdateCheck = 1200;
117 | LastUpgradeCheck = 1200;
118 | TargetAttributes = {
119 | 4755D8BF252B97A70007195E = {
120 | CreatedOnToolsVersion = 12.0;
121 | };
122 | };
123 | };
124 | buildConfigurationList = 4755D8BB252B97A70007195E /* Build configuration list for PBXProject "MacOSExample" */;
125 | compatibilityVersion = "Xcode 9.3";
126 | developmentRegion = en;
127 | hasScannedForEncodings = 0;
128 | knownRegions = (
129 | en,
130 | Base,
131 | );
132 | mainGroup = 4755D8B7252B97A70007195E;
133 | productRefGroup = 4755D8C1252B97A70007195E /* Products */;
134 | projectDirPath = "";
135 | projectRoot = "";
136 | targets = (
137 | 4755D8BF252B97A70007195E /* MacOSExample */,
138 | );
139 | };
140 | /* End PBXProject section */
141 |
142 | /* Begin PBXResourcesBuildPhase section */
143 | 4755D8BE252B97A70007195E /* Resources */ = {
144 | isa = PBXResourcesBuildPhase;
145 | buildActionMask = 2147483647;
146 | files = (
147 | 4755D8CE252B97A80007195E /* Main.storyboard in Resources */,
148 | 4755D8CB252B97A80007195E /* Preview Assets.xcassets in Resources */,
149 | 4755D8C8252B97A80007195E /* Assets.xcassets in Resources */,
150 | );
151 | runOnlyForDeploymentPostprocessing = 0;
152 | };
153 | /* End PBXResourcesBuildPhase section */
154 |
155 | /* Begin PBXSourcesBuildPhase section */
156 | 4755D8BC252B97A70007195E /* Sources */ = {
157 | isa = PBXSourcesBuildPhase;
158 | buildActionMask = 2147483647;
159 | files = (
160 | 4755D8C6252B97A70007195E /* ContentView.swift in Sources */,
161 | 4755D8C4252B97A70007195E /* AppDelegate.swift in Sources */,
162 | );
163 | runOnlyForDeploymentPostprocessing = 0;
164 | };
165 | /* End PBXSourcesBuildPhase section */
166 |
167 | /* Begin PBXVariantGroup section */
168 | 4755D8CC252B97A80007195E /* Main.storyboard */ = {
169 | isa = PBXVariantGroup;
170 | children = (
171 | 4755D8CD252B97A80007195E /* Base */,
172 | );
173 | name = Main.storyboard;
174 | sourceTree = "";
175 | };
176 | /* End PBXVariantGroup section */
177 |
178 | /* Begin XCBuildConfiguration section */
179 | 4755D8D1252B97A80007195E /* Debug */ = {
180 | isa = XCBuildConfiguration;
181 | buildSettings = {
182 | ALWAYS_SEARCH_USER_PATHS = NO;
183 | CLANG_ANALYZER_NONNULL = YES;
184 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
185 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
186 | CLANG_CXX_LIBRARY = "libc++";
187 | CLANG_ENABLE_MODULES = YES;
188 | CLANG_ENABLE_OBJC_ARC = YES;
189 | CLANG_ENABLE_OBJC_WEAK = YES;
190 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
191 | CLANG_WARN_BOOL_CONVERSION = YES;
192 | CLANG_WARN_COMMA = YES;
193 | CLANG_WARN_CONSTANT_CONVERSION = YES;
194 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
195 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
196 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
197 | CLANG_WARN_EMPTY_BODY = YES;
198 | CLANG_WARN_ENUM_CONVERSION = YES;
199 | CLANG_WARN_INFINITE_RECURSION = YES;
200 | CLANG_WARN_INT_CONVERSION = YES;
201 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
202 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
203 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
204 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
205 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
206 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
207 | CLANG_WARN_STRICT_PROTOTYPES = YES;
208 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
209 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
210 | CLANG_WARN_UNREACHABLE_CODE = YES;
211 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
212 | COPY_PHASE_STRIP = NO;
213 | DEBUG_INFORMATION_FORMAT = dwarf;
214 | ENABLE_STRICT_OBJC_MSGSEND = YES;
215 | ENABLE_TESTABILITY = YES;
216 | GCC_C_LANGUAGE_STANDARD = gnu11;
217 | GCC_DYNAMIC_NO_PIC = NO;
218 | GCC_NO_COMMON_BLOCKS = YES;
219 | GCC_OPTIMIZATION_LEVEL = 0;
220 | GCC_PREPROCESSOR_DEFINITIONS = (
221 | "DEBUG=1",
222 | "$(inherited)",
223 | );
224 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
225 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
226 | GCC_WARN_UNDECLARED_SELECTOR = YES;
227 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
228 | GCC_WARN_UNUSED_FUNCTION = YES;
229 | GCC_WARN_UNUSED_VARIABLE = YES;
230 | MACOSX_DEPLOYMENT_TARGET = 10.15;
231 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
232 | MTL_FAST_MATH = YES;
233 | ONLY_ACTIVE_ARCH = YES;
234 | SDKROOT = macosx;
235 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
236 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
237 | };
238 | name = Debug;
239 | };
240 | 4755D8D2252B97A80007195E /* Release */ = {
241 | isa = XCBuildConfiguration;
242 | buildSettings = {
243 | ALWAYS_SEARCH_USER_PATHS = NO;
244 | CLANG_ANALYZER_NONNULL = YES;
245 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
246 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
247 | CLANG_CXX_LIBRARY = "libc++";
248 | CLANG_ENABLE_MODULES = YES;
249 | CLANG_ENABLE_OBJC_ARC = YES;
250 | CLANG_ENABLE_OBJC_WEAK = YES;
251 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
252 | CLANG_WARN_BOOL_CONVERSION = YES;
253 | CLANG_WARN_COMMA = YES;
254 | CLANG_WARN_CONSTANT_CONVERSION = YES;
255 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
256 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
257 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
258 | CLANG_WARN_EMPTY_BODY = YES;
259 | CLANG_WARN_ENUM_CONVERSION = YES;
260 | CLANG_WARN_INFINITE_RECURSION = YES;
261 | CLANG_WARN_INT_CONVERSION = YES;
262 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
263 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
264 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
265 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
266 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
267 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
268 | CLANG_WARN_STRICT_PROTOTYPES = YES;
269 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
270 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
271 | CLANG_WARN_UNREACHABLE_CODE = YES;
272 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
273 | COPY_PHASE_STRIP = NO;
274 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
275 | ENABLE_NS_ASSERTIONS = NO;
276 | ENABLE_STRICT_OBJC_MSGSEND = YES;
277 | GCC_C_LANGUAGE_STANDARD = gnu11;
278 | GCC_NO_COMMON_BLOCKS = YES;
279 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
280 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
281 | GCC_WARN_UNDECLARED_SELECTOR = YES;
282 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
283 | GCC_WARN_UNUSED_FUNCTION = YES;
284 | GCC_WARN_UNUSED_VARIABLE = YES;
285 | MACOSX_DEPLOYMENT_TARGET = 10.15;
286 | MTL_ENABLE_DEBUG_INFO = NO;
287 | MTL_FAST_MATH = YES;
288 | SDKROOT = macosx;
289 | SWIFT_COMPILATION_MODE = wholemodule;
290 | SWIFT_OPTIMIZATION_LEVEL = "-O";
291 | };
292 | name = Release;
293 | };
294 | 4755D8D4252B97A80007195E /* Debug */ = {
295 | isa = XCBuildConfiguration;
296 | buildSettings = {
297 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
298 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
299 | CODE_SIGN_ENTITLEMENTS = MacOSExample/MacOSExample.entitlements;
300 | CODE_SIGN_STYLE = Automatic;
301 | COMBINE_HIDPI_IMAGES = YES;
302 | DEVELOPMENT_ASSET_PATHS = "\"MacOSExample/Preview Content\"";
303 | DEVELOPMENT_TEAM = TC4LDUY2D5;
304 | ENABLE_HARDENED_RUNTIME = YES;
305 | ENABLE_PREVIEWS = YES;
306 | INFOPLIST_FILE = MacOSExample/Info.plist;
307 | LD_RUNPATH_SEARCH_PATHS = (
308 | "$(inherited)",
309 | "@executable_path/../Frameworks",
310 | );
311 | MACOSX_DEPLOYMENT_TARGET = 10.15;
312 | PRODUCT_BUNDLE_IDENTIFIER = mg.MacOSExample;
313 | PRODUCT_NAME = "$(TARGET_NAME)";
314 | SWIFT_VERSION = 5.0;
315 | };
316 | name = Debug;
317 | };
318 | 4755D8D5252B97A80007195E /* Release */ = {
319 | isa = XCBuildConfiguration;
320 | buildSettings = {
321 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
322 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
323 | CODE_SIGN_ENTITLEMENTS = MacOSExample/MacOSExample.entitlements;
324 | CODE_SIGN_STYLE = Automatic;
325 | COMBINE_HIDPI_IMAGES = YES;
326 | DEVELOPMENT_ASSET_PATHS = "\"MacOSExample/Preview Content\"";
327 | DEVELOPMENT_TEAM = TC4LDUY2D5;
328 | ENABLE_HARDENED_RUNTIME = YES;
329 | ENABLE_PREVIEWS = YES;
330 | INFOPLIST_FILE = MacOSExample/Info.plist;
331 | LD_RUNPATH_SEARCH_PATHS = (
332 | "$(inherited)",
333 | "@executable_path/../Frameworks",
334 | );
335 | MACOSX_DEPLOYMENT_TARGET = 10.15;
336 | PRODUCT_BUNDLE_IDENTIFIER = mg.MacOSExample;
337 | PRODUCT_NAME = "$(TARGET_NAME)";
338 | SWIFT_VERSION = 5.0;
339 | };
340 | name = Release;
341 | };
342 | /* End XCBuildConfiguration section */
343 |
344 | /* Begin XCConfigurationList section */
345 | 4755D8BB252B97A70007195E /* Build configuration list for PBXProject "MacOSExample" */ = {
346 | isa = XCConfigurationList;
347 | buildConfigurations = (
348 | 4755D8D1252B97A80007195E /* Debug */,
349 | 4755D8D2252B97A80007195E /* Release */,
350 | );
351 | defaultConfigurationIsVisible = 0;
352 | defaultConfigurationName = Release;
353 | };
354 | 4755D8D3252B97A80007195E /* Build configuration list for PBXNativeTarget "MacOSExample" */ = {
355 | isa = XCConfigurationList;
356 | buildConfigurations = (
357 | 4755D8D4252B97A80007195E /* Debug */,
358 | 4755D8D5252B97A80007195E /* Release */,
359 | );
360 | defaultConfigurationIsVisible = 0;
361 | defaultConfigurationName = Release;
362 | };
363 | /* End XCConfigurationList section */
364 |
365 | /* Begin XCSwiftPackageProductDependency section */
366 | 473A8E22252BBE24009264D0 /* MGFlipView */ = {
367 | isa = XCSwiftPackageProductDependency;
368 | productName = MGFlipView;
369 | };
370 | /* End XCSwiftPackageProductDependency section */
371 | };
372 | rootObject = 4755D8B8252B97A70007195E /* Project object */;
373 | }
374 |
--------------------------------------------------------------------------------
/Examples/WatchOSExample/WatchOSExample.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 52;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 473A8E1D252BBD0D009264D0 /* MGFlipView in Frameworks */ = {isa = PBXBuildFile; productRef = 473A8E1C252BBD0D009264D0 /* MGFlipView */; };
11 | 4755D86A252B94C00007195E /* WatchOSExample WatchKit App.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = 4755D869252B94C00007195E /* WatchOSExample WatchKit App.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
12 | 4755D86F252B94C10007195E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4755D86E252B94C10007195E /* Assets.xcassets */; };
13 | 4755D876252B94C10007195E /* WatchOSExample WatchKit Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 4755D875252B94C10007195E /* WatchOSExample WatchKit Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
14 | 4755D87B252B94C10007195E /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4755D87A252B94C10007195E /* ContentView.swift */; };
15 | 4755D87D252B94C10007195E /* WatchOSExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4755D87C252B94C10007195E /* WatchOSExampleApp.swift */; };
16 | 4755D87F252B94C10007195E /* ComplicationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4755D87E252B94C10007195E /* ComplicationController.swift */; };
17 | 4755D881252B94C10007195E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4755D880252B94C10007195E /* Assets.xcassets */; };
18 | 4755D884252B94C10007195E /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4755D883252B94C10007195E /* Preview Assets.xcassets */; };
19 | /* End PBXBuildFile section */
20 |
21 | /* Begin PBXContainerItemProxy section */
22 | 4755D86B252B94C00007195E /* PBXContainerItemProxy */ = {
23 | isa = PBXContainerItemProxy;
24 | containerPortal = 4755D85F252B94C00007195E /* Project object */;
25 | proxyType = 1;
26 | remoteGlobalIDString = 4755D868252B94C00007195E;
27 | remoteInfo = "WatchOSExample WatchKit App";
28 | };
29 | 4755D877252B94C10007195E /* PBXContainerItemProxy */ = {
30 | isa = PBXContainerItemProxy;
31 | containerPortal = 4755D85F252B94C00007195E /* Project object */;
32 | proxyType = 1;
33 | remoteGlobalIDString = 4755D874252B94C10007195E;
34 | remoteInfo = "WatchOSExample WatchKit Extension";
35 | };
36 | /* End PBXContainerItemProxy section */
37 |
38 | /* Begin PBXCopyFilesBuildPhase section */
39 | 4755D88B252B94C10007195E /* Embed App Extensions */ = {
40 | isa = PBXCopyFilesBuildPhase;
41 | buildActionMask = 2147483647;
42 | dstPath = "";
43 | dstSubfolderSpec = 13;
44 | files = (
45 | 4755D876252B94C10007195E /* WatchOSExample WatchKit Extension.appex in Embed App Extensions */,
46 | );
47 | name = "Embed App Extensions";
48 | runOnlyForDeploymentPostprocessing = 0;
49 | };
50 | 4755D88F252B94C10007195E /* Embed Watch Content */ = {
51 | isa = PBXCopyFilesBuildPhase;
52 | buildActionMask = 2147483647;
53 | dstPath = "$(CONTENTS_FOLDER_PATH)/Watch";
54 | dstSubfolderSpec = 16;
55 | files = (
56 | 4755D86A252B94C00007195E /* WatchOSExample WatchKit App.app in Embed Watch Content */,
57 | );
58 | name = "Embed Watch Content";
59 | runOnlyForDeploymentPostprocessing = 0;
60 | };
61 | /* End PBXCopyFilesBuildPhase section */
62 |
63 | /* Begin PBXFileReference section */
64 | 4755D865252B94C00007195E /* WatchOSExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WatchOSExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
65 | 4755D869252B94C00007195E /* WatchOSExample WatchKit App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "WatchOSExample WatchKit App.app"; sourceTree = BUILT_PRODUCTS_DIR; };
66 | 4755D86E252B94C10007195E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
67 | 4755D870252B94C10007195E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
68 | 4755D875252B94C10007195E /* WatchOSExample WatchKit Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "WatchOSExample WatchKit Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
69 | 4755D87A252B94C10007195E /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
70 | 4755D87C252B94C10007195E /* WatchOSExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchOSExampleApp.swift; sourceTree = ""; };
71 | 4755D87E252B94C10007195E /* ComplicationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComplicationController.swift; sourceTree = ""; };
72 | 4755D880252B94C10007195E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
73 | 4755D883252B94C10007195E /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
74 | 4755D885252B94C10007195E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
75 | /* End PBXFileReference section */
76 |
77 | /* Begin PBXFrameworksBuildPhase section */
78 | 4755D872252B94C10007195E /* Frameworks */ = {
79 | isa = PBXFrameworksBuildPhase;
80 | buildActionMask = 2147483647;
81 | files = (
82 | 473A8E1D252BBD0D009264D0 /* MGFlipView in Frameworks */,
83 | );
84 | runOnlyForDeploymentPostprocessing = 0;
85 | };
86 | /* End PBXFrameworksBuildPhase section */
87 |
88 | /* Begin PBXGroup section */
89 | 473A8E1B252BBD0D009264D0 /* Frameworks */ = {
90 | isa = PBXGroup;
91 | children = (
92 | );
93 | name = Frameworks;
94 | sourceTree = "";
95 | };
96 | 4755D85E252B94C00007195E = {
97 | isa = PBXGroup;
98 | children = (
99 | 4755D86D252B94C00007195E /* WatchOSExample WatchKit App */,
100 | 4755D879252B94C10007195E /* WatchOSExample WatchKit Extension */,
101 | 4755D866252B94C00007195E /* Products */,
102 | 473A8E1B252BBD0D009264D0 /* Frameworks */,
103 | );
104 | sourceTree = "";
105 | };
106 | 4755D866252B94C00007195E /* Products */ = {
107 | isa = PBXGroup;
108 | children = (
109 | 4755D865252B94C00007195E /* WatchOSExample.app */,
110 | 4755D869252B94C00007195E /* WatchOSExample WatchKit App.app */,
111 | 4755D875252B94C10007195E /* WatchOSExample WatchKit Extension.appex */,
112 | );
113 | name = Products;
114 | sourceTree = "";
115 | };
116 | 4755D86D252B94C00007195E /* WatchOSExample WatchKit App */ = {
117 | isa = PBXGroup;
118 | children = (
119 | 4755D86E252B94C10007195E /* Assets.xcassets */,
120 | 4755D870252B94C10007195E /* Info.plist */,
121 | );
122 | path = "WatchOSExample WatchKit App";
123 | sourceTree = "";
124 | };
125 | 4755D879252B94C10007195E /* WatchOSExample WatchKit Extension */ = {
126 | isa = PBXGroup;
127 | children = (
128 | 4755D87A252B94C10007195E /* ContentView.swift */,
129 | 4755D87C252B94C10007195E /* WatchOSExampleApp.swift */,
130 | 4755D87E252B94C10007195E /* ComplicationController.swift */,
131 | 4755D880252B94C10007195E /* Assets.xcassets */,
132 | 4755D885252B94C10007195E /* Info.plist */,
133 | 4755D882252B94C10007195E /* Preview Content */,
134 | );
135 | path = "WatchOSExample WatchKit Extension";
136 | sourceTree = "";
137 | };
138 | 4755D882252B94C10007195E /* Preview Content */ = {
139 | isa = PBXGroup;
140 | children = (
141 | 4755D883252B94C10007195E /* Preview Assets.xcassets */,
142 | );
143 | path = "Preview Content";
144 | sourceTree = "";
145 | };
146 | /* End PBXGroup section */
147 |
148 | /* Begin PBXNativeTarget section */
149 | 4755D864252B94C00007195E /* WatchOSExample */ = {
150 | isa = PBXNativeTarget;
151 | buildConfigurationList = 4755D890252B94C10007195E /* Build configuration list for PBXNativeTarget "WatchOSExample" */;
152 | buildPhases = (
153 | 4755D863252B94C00007195E /* Resources */,
154 | 4755D88F252B94C10007195E /* Embed Watch Content */,
155 | );
156 | buildRules = (
157 | );
158 | dependencies = (
159 | 4755D86C252B94C00007195E /* PBXTargetDependency */,
160 | );
161 | name = WatchOSExample;
162 | productName = WatchOSExample;
163 | productReference = 4755D865252B94C00007195E /* WatchOSExample.app */;
164 | productType = "com.apple.product-type.application.watchapp2-container";
165 | };
166 | 4755D868252B94C00007195E /* WatchOSExample WatchKit App */ = {
167 | isa = PBXNativeTarget;
168 | buildConfigurationList = 4755D88C252B94C10007195E /* Build configuration list for PBXNativeTarget "WatchOSExample WatchKit App" */;
169 | buildPhases = (
170 | 4755D867252B94C00007195E /* Resources */,
171 | 4755D88B252B94C10007195E /* Embed App Extensions */,
172 | );
173 | buildRules = (
174 | );
175 | dependencies = (
176 | 4755D878252B94C10007195E /* PBXTargetDependency */,
177 | );
178 | name = "WatchOSExample WatchKit App";
179 | productName = "WatchOSExample WatchKit App";
180 | productReference = 4755D869252B94C00007195E /* WatchOSExample WatchKit App.app */;
181 | productType = "com.apple.product-type.application.watchapp2";
182 | };
183 | 4755D874252B94C10007195E /* WatchOSExample WatchKit Extension */ = {
184 | isa = PBXNativeTarget;
185 | buildConfigurationList = 4755D888252B94C10007195E /* Build configuration list for PBXNativeTarget "WatchOSExample WatchKit Extension" */;
186 | buildPhases = (
187 | 4755D871252B94C10007195E /* Sources */,
188 | 4755D872252B94C10007195E /* Frameworks */,
189 | 4755D873252B94C10007195E /* Resources */,
190 | );
191 | buildRules = (
192 | );
193 | dependencies = (
194 | );
195 | name = "WatchOSExample WatchKit Extension";
196 | packageProductDependencies = (
197 | 473A8E1C252BBD0D009264D0 /* MGFlipView */,
198 | );
199 | productName = "WatchOSExample WatchKit Extension";
200 | productReference = 4755D875252B94C10007195E /* WatchOSExample WatchKit Extension.appex */;
201 | productType = "com.apple.product-type.watchkit2-extension";
202 | };
203 | /* End PBXNativeTarget section */
204 |
205 | /* Begin PBXProject section */
206 | 4755D85F252B94C00007195E /* Project object */ = {
207 | isa = PBXProject;
208 | attributes = {
209 | LastSwiftUpdateCheck = 1200;
210 | LastUpgradeCheck = 1200;
211 | TargetAttributes = {
212 | 4755D864252B94C00007195E = {
213 | CreatedOnToolsVersion = 12.0;
214 | };
215 | 4755D868252B94C00007195E = {
216 | CreatedOnToolsVersion = 12.0;
217 | };
218 | 4755D874252B94C10007195E = {
219 | CreatedOnToolsVersion = 12.0;
220 | };
221 | };
222 | };
223 | buildConfigurationList = 4755D862252B94C00007195E /* Build configuration list for PBXProject "WatchOSExample" */;
224 | compatibilityVersion = "Xcode 9.3";
225 | developmentRegion = en;
226 | hasScannedForEncodings = 0;
227 | knownRegions = (
228 | en,
229 | Base,
230 | );
231 | mainGroup = 4755D85E252B94C00007195E;
232 | productRefGroup = 4755D866252B94C00007195E /* Products */;
233 | projectDirPath = "";
234 | projectRoot = "";
235 | targets = (
236 | 4755D864252B94C00007195E /* WatchOSExample */,
237 | 4755D868252B94C00007195E /* WatchOSExample WatchKit App */,
238 | 4755D874252B94C10007195E /* WatchOSExample WatchKit Extension */,
239 | );
240 | };
241 | /* End PBXProject section */
242 |
243 | /* Begin PBXResourcesBuildPhase section */
244 | 4755D863252B94C00007195E /* Resources */ = {
245 | isa = PBXResourcesBuildPhase;
246 | buildActionMask = 2147483647;
247 | files = (
248 | );
249 | runOnlyForDeploymentPostprocessing = 0;
250 | };
251 | 4755D867252B94C00007195E /* Resources */ = {
252 | isa = PBXResourcesBuildPhase;
253 | buildActionMask = 2147483647;
254 | files = (
255 | 4755D86F252B94C10007195E /* Assets.xcassets in Resources */,
256 | );
257 | runOnlyForDeploymentPostprocessing = 0;
258 | };
259 | 4755D873252B94C10007195E /* Resources */ = {
260 | isa = PBXResourcesBuildPhase;
261 | buildActionMask = 2147483647;
262 | files = (
263 | 4755D884252B94C10007195E /* Preview Assets.xcassets in Resources */,
264 | 4755D881252B94C10007195E /* Assets.xcassets in Resources */,
265 | );
266 | runOnlyForDeploymentPostprocessing = 0;
267 | };
268 | /* End PBXResourcesBuildPhase section */
269 |
270 | /* Begin PBXSourcesBuildPhase section */
271 | 4755D871252B94C10007195E /* Sources */ = {
272 | isa = PBXSourcesBuildPhase;
273 | buildActionMask = 2147483647;
274 | files = (
275 | 4755D87D252B94C10007195E /* WatchOSExampleApp.swift in Sources */,
276 | 4755D87B252B94C10007195E /* ContentView.swift in Sources */,
277 | 4755D87F252B94C10007195E /* ComplicationController.swift in Sources */,
278 | );
279 | runOnlyForDeploymentPostprocessing = 0;
280 | };
281 | /* End PBXSourcesBuildPhase section */
282 |
283 | /* Begin PBXTargetDependency section */
284 | 4755D86C252B94C00007195E /* PBXTargetDependency */ = {
285 | isa = PBXTargetDependency;
286 | target = 4755D868252B94C00007195E /* WatchOSExample WatchKit App */;
287 | targetProxy = 4755D86B252B94C00007195E /* PBXContainerItemProxy */;
288 | };
289 | 4755D878252B94C10007195E /* PBXTargetDependency */ = {
290 | isa = PBXTargetDependency;
291 | target = 4755D874252B94C10007195E /* WatchOSExample WatchKit Extension */;
292 | targetProxy = 4755D877252B94C10007195E /* PBXContainerItemProxy */;
293 | };
294 | /* End PBXTargetDependency section */
295 |
296 | /* Begin XCBuildConfiguration section */
297 | 4755D886252B94C10007195E /* Debug */ = {
298 | isa = XCBuildConfiguration;
299 | buildSettings = {
300 | ALWAYS_SEARCH_USER_PATHS = NO;
301 | CLANG_ANALYZER_NONNULL = YES;
302 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
303 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
304 | CLANG_CXX_LIBRARY = "libc++";
305 | CLANG_ENABLE_MODULES = YES;
306 | CLANG_ENABLE_OBJC_ARC = YES;
307 | CLANG_ENABLE_OBJC_WEAK = YES;
308 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
309 | CLANG_WARN_BOOL_CONVERSION = YES;
310 | CLANG_WARN_COMMA = YES;
311 | CLANG_WARN_CONSTANT_CONVERSION = YES;
312 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
313 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
314 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
315 | CLANG_WARN_EMPTY_BODY = YES;
316 | CLANG_WARN_ENUM_CONVERSION = YES;
317 | CLANG_WARN_INFINITE_RECURSION = YES;
318 | CLANG_WARN_INT_CONVERSION = YES;
319 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
320 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
321 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
322 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
323 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
324 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
325 | CLANG_WARN_STRICT_PROTOTYPES = YES;
326 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
327 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
328 | CLANG_WARN_UNREACHABLE_CODE = YES;
329 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
330 | COPY_PHASE_STRIP = NO;
331 | DEBUG_INFORMATION_FORMAT = dwarf;
332 | ENABLE_STRICT_OBJC_MSGSEND = YES;
333 | ENABLE_TESTABILITY = YES;
334 | GCC_C_LANGUAGE_STANDARD = gnu11;
335 | GCC_DYNAMIC_NO_PIC = NO;
336 | GCC_NO_COMMON_BLOCKS = YES;
337 | GCC_OPTIMIZATION_LEVEL = 0;
338 | GCC_PREPROCESSOR_DEFINITIONS = (
339 | "DEBUG=1",
340 | "$(inherited)",
341 | );
342 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
343 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
344 | GCC_WARN_UNDECLARED_SELECTOR = YES;
345 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
346 | GCC_WARN_UNUSED_FUNCTION = YES;
347 | GCC_WARN_UNUSED_VARIABLE = YES;
348 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
349 | MTL_FAST_MATH = YES;
350 | ONLY_ACTIVE_ARCH = YES;
351 | SDKROOT = iphoneos;
352 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
353 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
354 | };
355 | name = Debug;
356 | };
357 | 4755D887252B94C10007195E /* Release */ = {
358 | isa = XCBuildConfiguration;
359 | buildSettings = {
360 | ALWAYS_SEARCH_USER_PATHS = NO;
361 | CLANG_ANALYZER_NONNULL = YES;
362 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
363 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
364 | CLANG_CXX_LIBRARY = "libc++";
365 | CLANG_ENABLE_MODULES = YES;
366 | CLANG_ENABLE_OBJC_ARC = YES;
367 | CLANG_ENABLE_OBJC_WEAK = YES;
368 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
369 | CLANG_WARN_BOOL_CONVERSION = YES;
370 | CLANG_WARN_COMMA = YES;
371 | CLANG_WARN_CONSTANT_CONVERSION = YES;
372 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
373 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
374 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
375 | CLANG_WARN_EMPTY_BODY = YES;
376 | CLANG_WARN_ENUM_CONVERSION = YES;
377 | CLANG_WARN_INFINITE_RECURSION = YES;
378 | CLANG_WARN_INT_CONVERSION = YES;
379 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
380 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
381 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
382 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
383 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
384 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
385 | CLANG_WARN_STRICT_PROTOTYPES = YES;
386 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
387 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
388 | CLANG_WARN_UNREACHABLE_CODE = YES;
389 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
390 | COPY_PHASE_STRIP = NO;
391 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
392 | ENABLE_NS_ASSERTIONS = NO;
393 | ENABLE_STRICT_OBJC_MSGSEND = YES;
394 | GCC_C_LANGUAGE_STANDARD = gnu11;
395 | GCC_NO_COMMON_BLOCKS = YES;
396 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
397 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
398 | GCC_WARN_UNDECLARED_SELECTOR = YES;
399 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
400 | GCC_WARN_UNUSED_FUNCTION = YES;
401 | GCC_WARN_UNUSED_VARIABLE = YES;
402 | MTL_ENABLE_DEBUG_INFO = NO;
403 | MTL_FAST_MATH = YES;
404 | SDKROOT = iphoneos;
405 | SWIFT_COMPILATION_MODE = wholemodule;
406 | SWIFT_OPTIMIZATION_LEVEL = "-O";
407 | VALIDATE_PRODUCT = YES;
408 | };
409 | name = Release;
410 | };
411 | 4755D889252B94C10007195E /* Debug */ = {
412 | isa = XCBuildConfiguration;
413 | buildSettings = {
414 | ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;
415 | CODE_SIGN_STYLE = Automatic;
416 | DEVELOPMENT_ASSET_PATHS = "\"WatchOSExample WatchKit Extension/Preview Content\"";
417 | DEVELOPMENT_TEAM = TC4LDUY2D5;
418 | ENABLE_PREVIEWS = YES;
419 | INFOPLIST_FILE = "WatchOSExample WatchKit Extension/Info.plist";
420 | LD_RUNPATH_SEARCH_PATHS = (
421 | "$(inherited)",
422 | "@executable_path/Frameworks",
423 | "@executable_path/../../Frameworks",
424 | );
425 | PRODUCT_BUNDLE_IDENTIFIER = mg.WatchOSExample.watchkitapp.watchkitextension;
426 | PRODUCT_NAME = "${TARGET_NAME}";
427 | SDKROOT = watchos;
428 | SKIP_INSTALL = YES;
429 | SWIFT_VERSION = 5.0;
430 | TARGETED_DEVICE_FAMILY = 4;
431 | WATCHOS_DEPLOYMENT_TARGET = 7.0;
432 | };
433 | name = Debug;
434 | };
435 | 4755D88A252B94C10007195E /* Release */ = {
436 | isa = XCBuildConfiguration;
437 | buildSettings = {
438 | ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication;
439 | CODE_SIGN_STYLE = Automatic;
440 | DEVELOPMENT_ASSET_PATHS = "\"WatchOSExample WatchKit Extension/Preview Content\"";
441 | DEVELOPMENT_TEAM = TC4LDUY2D5;
442 | ENABLE_PREVIEWS = YES;
443 | INFOPLIST_FILE = "WatchOSExample WatchKit Extension/Info.plist";
444 | LD_RUNPATH_SEARCH_PATHS = (
445 | "$(inherited)",
446 | "@executable_path/Frameworks",
447 | "@executable_path/../../Frameworks",
448 | );
449 | PRODUCT_BUNDLE_IDENTIFIER = mg.WatchOSExample.watchkitapp.watchkitextension;
450 | PRODUCT_NAME = "${TARGET_NAME}";
451 | SDKROOT = watchos;
452 | SKIP_INSTALL = YES;
453 | SWIFT_VERSION = 5.0;
454 | TARGETED_DEVICE_FAMILY = 4;
455 | WATCHOS_DEPLOYMENT_TARGET = 7.0;
456 | };
457 | name = Release;
458 | };
459 | 4755D88D252B94C10007195E /* Debug */ = {
460 | isa = XCBuildConfiguration;
461 | buildSettings = {
462 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
463 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
464 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
465 | CODE_SIGN_STYLE = Automatic;
466 | DEVELOPMENT_TEAM = TC4LDUY2D5;
467 | IBSC_MODULE = WatchOSExample_WatchKit_Extension;
468 | INFOPLIST_FILE = "WatchOSExample WatchKit App/Info.plist";
469 | PRODUCT_BUNDLE_IDENTIFIER = mg.WatchOSExample.watchkitapp;
470 | PRODUCT_NAME = "$(TARGET_NAME)";
471 | SDKROOT = watchos;
472 | SKIP_INSTALL = YES;
473 | SWIFT_VERSION = 5.0;
474 | TARGETED_DEVICE_FAMILY = 4;
475 | WATCHOS_DEPLOYMENT_TARGET = 7.0;
476 | };
477 | name = Debug;
478 | };
479 | 4755D88E252B94C10007195E /* Release */ = {
480 | isa = XCBuildConfiguration;
481 | buildSettings = {
482 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
483 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
484 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
485 | CODE_SIGN_STYLE = Automatic;
486 | DEVELOPMENT_TEAM = TC4LDUY2D5;
487 | IBSC_MODULE = WatchOSExample_WatchKit_Extension;
488 | INFOPLIST_FILE = "WatchOSExample WatchKit App/Info.plist";
489 | PRODUCT_BUNDLE_IDENTIFIER = mg.WatchOSExample.watchkitapp;
490 | PRODUCT_NAME = "$(TARGET_NAME)";
491 | SDKROOT = watchos;
492 | SKIP_INSTALL = YES;
493 | SWIFT_VERSION = 5.0;
494 | TARGETED_DEVICE_FAMILY = 4;
495 | WATCHOS_DEPLOYMENT_TARGET = 7.0;
496 | };
497 | name = Release;
498 | };
499 | 4755D891252B94C10007195E /* Debug */ = {
500 | isa = XCBuildConfiguration;
501 | buildSettings = {
502 | CODE_SIGN_STYLE = Automatic;
503 | CURRENT_PROJECT_VERSION = 1;
504 | DEVELOPMENT_TEAM = TC4LDUY2D5;
505 | MARKETING_VERSION = 1.0;
506 | PRODUCT_BUNDLE_IDENTIFIER = mg.WatchOSExample;
507 | PRODUCT_NAME = "$(TARGET_NAME)";
508 | SWIFT_VERSION = 5.0;
509 | };
510 | name = Debug;
511 | };
512 | 4755D892252B94C10007195E /* Release */ = {
513 | isa = XCBuildConfiguration;
514 | buildSettings = {
515 | CODE_SIGN_STYLE = Automatic;
516 | CURRENT_PROJECT_VERSION = 1;
517 | DEVELOPMENT_TEAM = TC4LDUY2D5;
518 | MARKETING_VERSION = 1.0;
519 | PRODUCT_BUNDLE_IDENTIFIER = mg.WatchOSExample;
520 | PRODUCT_NAME = "$(TARGET_NAME)";
521 | SWIFT_VERSION = 5.0;
522 | };
523 | name = Release;
524 | };
525 | /* End XCBuildConfiguration section */
526 |
527 | /* Begin XCConfigurationList section */
528 | 4755D862252B94C00007195E /* Build configuration list for PBXProject "WatchOSExample" */ = {
529 | isa = XCConfigurationList;
530 | buildConfigurations = (
531 | 4755D886252B94C10007195E /* Debug */,
532 | 4755D887252B94C10007195E /* Release */,
533 | );
534 | defaultConfigurationIsVisible = 0;
535 | defaultConfigurationName = Release;
536 | };
537 | 4755D888252B94C10007195E /* Build configuration list for PBXNativeTarget "WatchOSExample WatchKit Extension" */ = {
538 | isa = XCConfigurationList;
539 | buildConfigurations = (
540 | 4755D889252B94C10007195E /* Debug */,
541 | 4755D88A252B94C10007195E /* Release */,
542 | );
543 | defaultConfigurationIsVisible = 0;
544 | defaultConfigurationName = Release;
545 | };
546 | 4755D88C252B94C10007195E /* Build configuration list for PBXNativeTarget "WatchOSExample WatchKit App" */ = {
547 | isa = XCConfigurationList;
548 | buildConfigurations = (
549 | 4755D88D252B94C10007195E /* Debug */,
550 | 4755D88E252B94C10007195E /* Release */,
551 | );
552 | defaultConfigurationIsVisible = 0;
553 | defaultConfigurationName = Release;
554 | };
555 | 4755D890252B94C10007195E /* Build configuration list for PBXNativeTarget "WatchOSExample" */ = {
556 | isa = XCConfigurationList;
557 | buildConfigurations = (
558 | 4755D891252B94C10007195E /* Debug */,
559 | 4755D892252B94C10007195E /* Release */,
560 | );
561 | defaultConfigurationIsVisible = 0;
562 | defaultConfigurationName = Release;
563 | };
564 | /* End XCConfigurationList section */
565 |
566 | /* Begin XCSwiftPackageProductDependency section */
567 | 473A8E1C252BBD0D009264D0 /* MGFlipView */ = {
568 | isa = XCSwiftPackageProductDependency;
569 | productName = MGFlipView;
570 | };
571 | /* End XCSwiftPackageProductDependency section */
572 | };
573 | rootObject = 4755D85F252B94C00007195E /* Project object */;
574 | }
575 |
--------------------------------------------------------------------------------
/Examples/MacOSExample/MacOSExample/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
672 |
673 |
674 |
675 |
676 |
677 |
678 |
679 |
680 |
681 |
682 |
683 |
684 |
--------------------------------------------------------------------------------