├── 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 | ![Swift](https://img.shields.io/badge/Swift-5.3-orange) 4 | ![Platforms](https://img.shields.io/badge/Platform-iOS%20%7C%20macOS%20%7C%20watchOS%20%7C%20tvOS-blue) 5 | ![Dependency manager](https://img.shields.io/badge/Dependency%20manager-SPM-green) 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 | ![Preview](Examples/flip_view_example.gif) 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 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | Default 529 | 530 | 531 | 532 | 533 | 534 | 535 | Left to Right 536 | 537 | 538 | 539 | 540 | 541 | 542 | Right to Left 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | Default 554 | 555 | 556 | 557 | 558 | 559 | 560 | Left to Right 561 | 562 | 563 | 564 | 565 | 566 | 567 | Right to Left 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | --------------------------------------------------------------------------------