├── .gitignore
├── .travis.yml
├── Info.plist
├── LICENSE
├── README.md
├── Sample
├── yavflSample-OSX
│ ├── AppDelegate.swift
│ ├── Base.lproj
│ │ └── Main.storyboard
│ ├── Images.xcassets
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── Info.plist
│ └── ViewController.swift
└── yavflSample-iOS
│ ├── AppDelegate.swift
│ ├── Base.lproj
│ └── Main.storyboard
│ ├── Images.xcassets
│ └── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Info.plist
│ └── ViewController.swift
├── Tests
├── yavflOSXTests
│ ├── Info.plist
│ └── yavflOSXTests.swift
├── yavflTests-tvos
│ ├── Info.plist
│ └── yavflTests_tvos.swift
└── yavflTests
│ ├── Info.plist
│ └── yavflTests.swift
├── images
└── layout_sample.png
├── yavfl.h
├── yavfl.playground
├── Contents.swift
├── contents.xcplayground
└── timeline.xctimeline
├── yavfl.podspec
├── yavfl.swift
└── yavfl.xcodeproj
├── project.pbxproj
├── project.xcworkspace
└── contents.xcworkspacedata
└── xcshareddata
└── xcschemes
├── yavfl-OSX.xcscheme
├── yavfl-iOS.xcscheme
└── yavfl-tvOS.xcscheme
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | build/
4 | *.pbxuser
5 | !default.pbxuser
6 | *.mode1v3
7 | !default.mode1v3
8 | *.mode2v3
9 | !default.mode2v3
10 | *.perspectivev3
11 | !default.perspectivev3
12 | xcuserdata
13 | *.xccheckout
14 | *.moved-aside
15 | DerivedData
16 | *.hmap
17 | *.ipa
18 | *.xcuserstate
19 |
20 | # CocoaPods
21 | #
22 | # We recommend against adding the Pods directory to your .gitignore. However
23 | # you should judge for yourself, the pros and cons are mentioned at:
24 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
25 | #
26 | # Pods/
27 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: objective-c
2 | osx_image: xcode9
3 |
4 | script:
5 | - xcrun simctl list
6 | - set -o pipefail
7 | - xcodebuild -project yavfl.xcodeproj -scheme yavfl-iOS test -sdk iphonesimulator -destination "platform=iOS Simulator,name=iPhone 6" | xcpretty -c
8 | - xcodebuild -project yavfl.xcodeproj -scheme yavfl-iOS test -sdk iphonesimulator -destination "platform=iOS Simulator,name=iPhone 6s Plus" | xcpretty -c
9 | - xcodebuild -project yavfl.xcodeproj -scheme yavfl-iOS test -sdk iphonesimulator -destination "platform=iOS Simulator,name=iPad Air" | xcpretty -c
10 | #- xcodebuild -project yavfl.xcodeproj -scheme yavfl-iOS test -sdk iphonesimulator -destination "platform=iOS Simulator,name=iPad Pro" | xcpretty -c
11 | - xcodebuild -project yavfl.xcodeproj -scheme yavfl-tvOS test -sdk appletvsimulator -destination "platform=tvOS Simulator,name=Apple TV 1080p" | xcpretty -c
12 | - xcodebuild -project yavfl.xcodeproj -scheme yavfl-OSX test -sdk macosx | xcpretty -c
13 | - pod lib lint --quick
14 |
15 | after_success:
16 | - bash <(curl -s https://codecov.io/bash)
17 |
--------------------------------------------------------------------------------
/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014
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 |
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # yavfl
2 |
3 | [](https://travis-ci.org/safx/yavfl)
4 | [](http://codecov.io/github/safx/yavfl?branch=master)
5 | 
6 | 
7 | 
8 | 
9 |
10 | yavfl is Yet Anoter Visual Format Language for Auto Layout.
11 |
12 | ## Usage
13 |
14 | In yavfl, you can write the code of visual format language as follows:
15 |
16 | ```swift
17 | visualFormat(label, textField) { l, t in
18 | .v ~ |-40-[l,==32];
19 | .v ~ |-40-[t,==32];
20 | .h ~ |-20-[l,==t]-10-[t]-|
21 | }
22 | ```
23 |
24 | * Trailing `;`s are needed since Xcode 7 beta 3 when you will write multiple statements in a block.
25 |
26 | 
27 |
28 | The following code is the equivallent code of the original visual format:
29 |
30 | ```swift
31 | let dic = ["l": label, "t": textField]
32 | label.setTranslatesAutoresizingMaskIntoConstraints(false)
33 | textField.setTranslatesAutoresizingMaskIntoConstraints(false)
34 | let c1 = NSLayoutConstraint.constraintsWithVisualFormat("V:|-40-[l(32)]", options: nil, metrics: nil, views: dic)
35 | let c2 = NSLayoutConstraint.constraintsWithVisualFormat("V:|-40-[t(32)]", options: nil, metrics: nil, views: dic)
36 | let c3 = NSLayoutConstraint.constraintsWithVisualFormat("|-20-[l(==t)]-10-[t]-|", options: nil, metrics: nil, views: dic)
37 | self.view.addConstraints(c1)
38 | self.view.addConstraints(c2)
39 | self.view.addConstraints(c3)
40 | ```
41 |
42 | If you aren't familiar with Visual Format Language, please visit [the original Visual Format Language page](https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/VisualFormatLanguage/VisualFormatLanguage.html) first.
43 |
44 | ## More Examples
45 |
46 | | yavfl | origial |
47 | |-----------------------------------------------|-------------------------------------------|
48 | | `.h ~ [button]-[textField]` | `[button]-[textField]` |
49 | | `.h ~ [button,>=50]` | `[button(>=50)]` |
50 | | `.h ~ |-50-[purpleBox]-50-|` | `|-50-[purpleBox]-50-|` |
51 | | `.v ~ [topField]-10-[bottomField]` | `V:[topField]-10-[bottomField]` |
52 | | `.h ~ [maroonView]-0-[blueView]` | `[maroonView][blueView]` |
53 | | `.h ~ [button,==100~20]` | `[button(100@20)]` |
54 | | `.h ~ [button1,==button2]` | `[button1(==button2)]` |
55 | | `.h ~ [flexibleButton,>=70,<=100]` | `[flexibleButton(>=70,<=100)]` |
56 | | `.h ~ |-[find]-[findNext]-[findField,>=20]-|` | `|-[find]-[findNext]-[findField(>=20)]-|` |
57 |
58 |
59 | ## Limitations
60 |
61 | * Yavfl does not check syntatic validity. You don't expect the code is valid even if its compilation succeeded.
62 | * *Connection*'s *predicateList* supports only one *predicate*.
63 | * function `visualFormat` supports up to 5 views.
64 |
65 | ## Differences from the Original Visual Format Language
66 |
67 | Some parts of the syntax are changed due to Swift's syntax limitation.
68 |
69 | * Do not use `()` for view's *predicate*.
70 | * Use `[button1,==button2]` instead of `[button1(==button2)]`.
71 | * Use `~` instead of `:` for *orientation* and `@` for *priority*, because these can not be used for custom operators.
72 | * Use `.h ~ |-[view]-|` instead of `h:|-[view]-|`.
73 | * Use `[view,==100~200]` instead of `[view(==100@200)]`.
74 | * *Orientation* (`.h` or `.v`) and operator `~` are required for applying layout constraints.
75 | * Operator `~` is a trigger for creating and applying constraints.
76 | * *Connection* (`-`) is required between views.
77 | * `[v1][v2]` is not allowed due to the syntax limitation. Use `[v1]-0-[v2]` instead.
78 | * *Relation* (`==`, `<=` or `>=`) is required for *predicate*.
79 | * `[view,100]` is not allowed. Use `[view,==100]` instead.
80 |
81 |
82 | ## Install
83 |
84 | pod 'yavfl'
85 |
86 | Or, just copy `yavfl.swift` into your project.
87 |
88 | ## Other Resources (in Japanese)
89 |
90 | * [Blog article](http://safx-dev.blogspot.jp/2014/12/auto-layoutvisual-format-languageswift.html)
91 | * [Slide @ Speaker Deck](https://speakerdeck.com/matuyuji/visual-format-languageka-jian-dan-nishu-keruswiftraihurari-yavfl)
92 |
--------------------------------------------------------------------------------
/Sample/yavflSample-OSX/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // yavflSample-OSX
4 | //
5 | // Created by Safx Developer on 2015/01/23.
6 | // Copyright (c) 2015 Safx Developers. All rights reserved.
7 | //
8 |
9 | import Cocoa
10 |
11 | @NSApplicationMain
12 | class AppDelegate: NSObject, NSApplicationDelegate {
13 |
14 |
15 |
16 | func applicationDidFinishLaunching(aNotification: NSNotification) {
17 | // Insert code here to initialize your application
18 | }
19 |
20 | func applicationWillTerminate(aNotification: NSNotification) {
21 | // Insert code here to tear down your application
22 | }
23 |
24 |
25 | }
26 |
27 |
--------------------------------------------------------------------------------
/Sample/yavflSample-OSX/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
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 |
--------------------------------------------------------------------------------
/Sample/yavflSample-OSX/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "size" : "16x16",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "size" : "16x16",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "size" : "32x32",
16 | "scale" : "1x"
17 | },
18 | {
19 | "idiom" : "mac",
20 | "size" : "32x32",
21 | "scale" : "2x"
22 | },
23 | {
24 | "idiom" : "mac",
25 | "size" : "128x128",
26 | "scale" : "1x"
27 | },
28 | {
29 | "idiom" : "mac",
30 | "size" : "128x128",
31 | "scale" : "2x"
32 | },
33 | {
34 | "idiom" : "mac",
35 | "size" : "256x256",
36 | "scale" : "1x"
37 | },
38 | {
39 | "idiom" : "mac",
40 | "size" : "256x256",
41 | "scale" : "2x"
42 | },
43 | {
44 | "idiom" : "mac",
45 | "size" : "512x512",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "mac",
50 | "size" : "512x512",
51 | "scale" : "2x"
52 | }
53 | ],
54 | "info" : {
55 | "version" : 1,
56 | "author" : "xcode"
57 | }
58 | }
--------------------------------------------------------------------------------
/Sample/yavflSample-OSX/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
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 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 1
25 | LSMinimumSystemVersion
26 | $(MACOSX_DEPLOYMENT_TARGET)
27 | NSHumanReadableCopyright
28 | Copyright © 2015年 Safx Developers. All rights reserved.
29 | NSMainStoryboardFile
30 | Main
31 | NSPrincipalClass
32 | NSApplication
33 |
34 |
35 |
--------------------------------------------------------------------------------
/Sample/yavflSample-OSX/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // yavflSample-OSX
4 | //
5 | // Created by Safx Developer on 2015/01/23.
6 | // Copyright (c) 2015 Safx Developers. All rights reserved.
7 | //
8 |
9 | import Cocoa
10 |
11 | class ViewController: NSViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 |
16 | // Do any additional setup after loading the view.
17 | let textField1 = NSTextField()
18 | let textField2 = NSTextField()
19 |
20 | textField1.stringValue = "Label"
21 | textField1.backgroundColor = NSColor.gray
22 | view.addSubview(textField1)
23 | view.addSubview(textField2)
24 |
25 | visualFormat(textField1, textField2) { l, t in
26 | .v ~ |-80-[l,==32];
27 | .v ~ [t,==48];
28 | .h ~ |-20-[l,==t]-10-[t]-| % .alignAllCenterY
29 | }
30 | }
31 | }
32 |
33 |
--------------------------------------------------------------------------------
/Sample/yavflSample-iOS/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // yavfl
4 | //
5 | // Created by Safx Developer on 2014/12/07.
6 | // Copyright (c) 2014 Safx Developers. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/Sample/yavflSample-iOS/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 |
--------------------------------------------------------------------------------
/Sample/yavflSample-iOS/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "29x29",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "40x40",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "40x40",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "60x60",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "60x60",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "ipad",
35 | "size" : "29x29",
36 | "scale" : "1x"
37 | },
38 | {
39 | "idiom" : "ipad",
40 | "size" : "29x29",
41 | "scale" : "2x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "40x40",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "40x40",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "76x76",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "76x76",
61 | "scale" : "2x"
62 | }
63 | ],
64 | "info" : {
65 | "version" : 1,
66 | "author" : "xcode"
67 | }
68 | }
--------------------------------------------------------------------------------
/Sample/yavflSample-iOS/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 | UISupportedInterfaceOrientations~ipad
40 |
41 | UIInterfaceOrientationPortrait
42 | UIInterfaceOrientationPortraitUpsideDown
43 | UIInterfaceOrientationLandscapeLeft
44 | UIInterfaceOrientationLandscapeRight
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/Sample/yavflSample-iOS/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // yavfl
4 | //
5 | // Created by Safx Developer on 2014/12/07.
6 | // Copyright (c) 2014 Safx Developers. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ViewController: UIViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 | // Do any additional setup after loading the view, typically from a nib.
16 |
17 | let label = UILabel()
18 | let textField = UITextField()
19 |
20 | label.text = "Label"
21 | label.backgroundColor = UIColor.gray
22 | textField.placeholder = "Input some text"
23 | textField.borderStyle = .line
24 | view.addSubview(label)
25 | view.addSubview(textField)
26 |
27 | visualFormat(label, textField) { l, t in
28 | .v ~ |-80-[l,==32];
29 | .v ~ [t,==48];
30 | .h ~ |-20-[l,==t]-10-[t]-| % .alignAllCenterY
31 | }
32 | }
33 |
34 | override func didReceiveMemoryWarning() {
35 | super.didReceiveMemoryWarning()
36 | // Dispose of any resources that can be recreated.
37 | }
38 |
39 | }
40 |
41 |
--------------------------------------------------------------------------------
/Tests/yavflOSXTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Tests/yavflOSXTests/yavflOSXTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // yavflOSXTests.swift
3 | // yavflOSXTests
4 | //
5 | // Created by Safx Developer on 2015/01/26.
6 | // Copyright (c) 2015年 Safx Developers. All rights reserved.
7 | //
8 |
9 | import Cocoa
10 | import XCTest
11 | @testable import yavfl
12 |
13 | extension LayoutViewName: Equatable {}
14 | public func == (lhs: LayoutViewName, rhs: LayoutViewName) -> Bool {
15 | return lhs.index == rhs.index && lhs.view === rhs.view
16 | }
17 |
18 |
19 | class yavflTests: XCTestCase {
20 |
21 | func vf(_ vf: VisualFormat) -> String {
22 | return vf.description
23 | }
24 |
25 | func opt(_ vf: VisualFormat) -> NSLayoutConstraint.FormatOptions {
26 | return vf.options
27 | }
28 |
29 | func rv(_ vf: VisualFormat) -> [LayoutViewName] {
30 | return vf.relatedViews
31 | }
32 |
33 | func testVisualFormat() {
34 | let x : ViewExpression = .view(LayoutViewName(view: NSView(), index: 1))
35 | let y : ViewExpression = .view(LayoutViewName(view: NSView(), index: 2))
36 | let z : ViewExpression = .view(LayoutViewName(view: NSView(), index: 3))
37 |
38 | XCTAssertEqual(vf(|[x]|) , "|[v1]|")
39 | XCTAssertEqual(vf(|-[x]|) , "|-[v1]|")
40 | XCTAssertEqual(vf(|[x]-|) , "|[v1]-|")
41 | XCTAssertEqual(vf(|-[x]-|) , "|-[v1]-|")
42 | XCTAssertEqual(vf(|-10-[x]-20-|) , "|-10-[v1]-20-|")
43 | XCTAssertEqual(vf(|-(>=100)-[x]-0-|) , "|-(>=100)-[v1]-0-|")
44 | XCTAssertEqual(vf(|-[x]-(>=99)-|) , "|-[v1]-(>=99)-|")
45 | XCTAssertEqual(vf([x,<=y~1000]) , "[v1(<=v2@1000)]")
46 | XCTAssertEqual(vf(|-0-[x,==200]-[y]-|), "|-0-[v1(==200)]-[v2]-|")
47 |
48 | XCTAssertEqual(vf([x]-[y]) , "[v1]-[v2]")
49 | XCTAssertEqual(vf([x,>=50]) , "[v1(>=50)]")
50 | XCTAssertEqual(vf(|-50-[x]-50-|) , "|-50-[v1]-50-|")
51 | XCTAssertEqual(vf([x]-10-[y]) , "[v1]-10-[v2]")
52 | XCTAssertEqual(vf([x]-0-[y]) , "[v1]-0-[v2]")
53 | XCTAssertEqual(vf([x,==100~20]) , "[v1(==100@20)]")
54 | XCTAssertEqual(vf([x,==y]) , "[v1(==v2)]")
55 | XCTAssertEqual(vf([x,>=70,<=100]) , "[v1(>=70,<=100)]")
56 | XCTAssertEqual(vf(|-[x]-[y]-[z,>=20]-|) , "|-[v1]-[v2]-[v3(>=20)]-|")
57 | }
58 |
59 | func testRelatedViews() {
60 | let x_ = NSView()
61 | let y_ = NSView()
62 | let z_ = NSView()
63 | let xn = LayoutViewName(view: x_, index: 1)
64 | let yn = LayoutViewName(view: y_, index: 2)
65 | let zn = LayoutViewName(view: z_, index: 3)
66 |
67 | visualFormat(x_, y_, z_) { x, y, z in
68 | XCTAssertEqual(rv(|[x]|) , [xn])
69 | XCTAssertEqual(rv(|-[x]|) , [xn])
70 | XCTAssertEqual(rv(|[x]-|) , [xn])
71 | XCTAssertEqual(rv(|-[x]-|) , [xn])
72 | XCTAssertEqual(rv(|-10-[x]-20-|) , [xn])
73 | XCTAssertEqual(rv(|-(>=100)-[x]-0-|) , [xn])
74 | XCTAssertEqual(rv(|-[x]-(>=99)-|) , [xn])
75 | XCTAssertEqual(rv([x,<=y~1000]) , [xn, yn])
76 | XCTAssertEqual(rv(|-0-[x,==200]-[y]-|), [xn, yn])
77 |
78 | XCTAssertEqual(rv([x]-[y]) , [xn, yn])
79 | XCTAssertEqual(rv([x,>=50]) , [xn])
80 | XCTAssertEqual(rv(|-50-[x]-50-|) , [xn])
81 | XCTAssertEqual(rv([x]-10-[y]) , [xn, yn])
82 | XCTAssertEqual(rv([x]-0-[y]) , [xn, yn])
83 | XCTAssertEqual(rv([x,==100~20]) , [xn])
84 | XCTAssertEqual(rv([x,==y]) , [xn, yn])
85 | XCTAssertEqual(rv([x,>=70,<=100]) , [xn])
86 | XCTAssertEqual(rv(|-[x]-[y]-[z,>=20]-|) , [xn, yn, zn])
87 | }
88 | }
89 |
90 | func testOptions() {
91 | let x : ViewExpression = .view(LayoutViewName(view: NSView(), index: 1))
92 |
93 | XCTAssertEqual(opt(|[x]|) , NSLayoutConstraint.FormatOptions())
94 | XCTAssertEqual(opt(|[x]| % .alignAllCenterY), NSLayoutConstraint.FormatOptions.alignAllCenterY)
95 | }
96 |
97 | func testCapture() {
98 | let par = NSView()
99 | let v = NSView()
100 | par.addSubview(v)
101 |
102 | var q1: [AnyObject]?
103 | visualFormat(v) { v in
104 | q1 = .h ~ |-[v]
105 | }
106 | XCTAssertEqual((q1!).count, 1)
107 |
108 | var q2: [AnyObject]?
109 | visualFormat(v) { v in
110 | q2 = .h ~ |-[v]-|
111 | }
112 | XCTAssertEqual((q2!).count, 2)
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/Tests/yavflTests-tvos/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Tests/yavflTests-tvos/yavflTests_tvos.swift:
--------------------------------------------------------------------------------
1 | //
2 | // yavflTests_tvos.swift
3 | // yavflTests-tvos
4 | //
5 | // Created by Safx Developer on 2015/11/17.
6 | // Copyright © 2015年 Safx Developers. All rights reserved.
7 | //
8 |
9 |
10 | import UIKit
11 | import XCTest
12 | @testable import yavfl
13 |
14 | extension LayoutViewName: Equatable {}
15 | public func == (lhs: LayoutViewName, rhs: LayoutViewName) -> Bool {
16 | return lhs.index == rhs.index && lhs.view === rhs.view
17 | }
18 |
19 |
20 | class yavflTests: XCTestCase {
21 |
22 | func vf(_ vf: VisualFormat) -> String {
23 | return vf.description
24 | }
25 |
26 | func opt(_ vf: VisualFormat) -> NSLayoutFormatOptions {
27 | return vf.options
28 | }
29 |
30 | func rv(_ vf: VisualFormat) -> [LayoutViewName] {
31 | return vf.relatedViews
32 | }
33 |
34 | func testVisualFormat() {
35 | let x : ViewExpression = .view(LayoutViewName(view: UIView(), index: 1))
36 | let y : ViewExpression = .view(LayoutViewName(view: UIView(), index: 2))
37 | let z : ViewExpression = .view(LayoutViewName(view: UIView(), index: 3))
38 |
39 | XCTAssertEqual(vf(|[x]|) , "|[v1]|")
40 | XCTAssertEqual(vf(|-[x]|) , "|-[v1]|")
41 | XCTAssertEqual(vf(|[x]-|) , "|[v1]-|")
42 | XCTAssertEqual(vf(|-[x]-|) , "|-[v1]-|")
43 | XCTAssertEqual(vf(|-10-[x]-20-|) , "|-10-[v1]-20-|")
44 | XCTAssertEqual(vf(|-(>=100)-[x]-0-|) , "|-(>=100)-[v1]-0-|")
45 | XCTAssertEqual(vf(|-[x]-(>=99)-|) , "|-[v1]-(>=99)-|")
46 | XCTAssertEqual(vf([x,<=y~1000]) , "[v1(<=v2@1000)]")
47 | XCTAssertEqual(vf(|-0-[x,==200]-[y]-|), "|-0-[v1(==200)]-[v2]-|")
48 |
49 | XCTAssertEqual(vf([x]-[y]) , "[v1]-[v2]")
50 | XCTAssertEqual(vf([x,>=50]) , "[v1(>=50)]")
51 | XCTAssertEqual(vf(|-50-[x]-50-|) , "|-50-[v1]-50-|")
52 | XCTAssertEqual(vf([x]-10-[y]) , "[v1]-10-[v2]")
53 | XCTAssertEqual(vf([x]-0-[y]) , "[v1]-0-[v2]")
54 | XCTAssertEqual(vf([x,==100~20]) , "[v1(==100@20)]")
55 | XCTAssertEqual(vf([x,==y]) , "[v1(==v2)]")
56 | XCTAssertEqual(vf([x,>=70,<=100]) , "[v1(>=70,<=100)]")
57 | XCTAssertEqual(vf(|-[x]-[y]-[z,>=20]-|) , "|-[v1]-[v2]-[v3(>=20)]-|")
58 | }
59 |
60 | func testRelatedViews() {
61 | let x_ = UIView()
62 | let y_ = UIView()
63 | let z_ = UIView()
64 | let xn = LayoutViewName(view: x_, index: 1)
65 | let yn = LayoutViewName(view: y_, index: 2)
66 | let zn = LayoutViewName(view: z_, index: 3)
67 |
68 | visualFormat(x_, y_, z_) { x, y, z in
69 | XCTAssertEqual(rv(|[x]|) , [xn])
70 | XCTAssertEqual(rv(|-[x]|) , [xn])
71 | XCTAssertEqual(rv(|[x]-|) , [xn])
72 | XCTAssertEqual(rv(|-[x]-|) , [xn])
73 | XCTAssertEqual(rv(|-10-[x]-20-|) , [xn])
74 | XCTAssertEqual(rv(|-(>=100)-[x]-0-|) , [xn])
75 | XCTAssertEqual(rv(|-[x]-(>=99)-|) , [xn])
76 | XCTAssertEqual(rv([x,<=y~1000]) , [xn, yn])
77 | XCTAssertEqual(rv(|-0-[x,==200]-[y]-|), [xn, yn])
78 |
79 | XCTAssertEqual(rv([x]-[y]) , [xn, yn])
80 | XCTAssertEqual(rv([x,>=50]) , [xn])
81 | XCTAssertEqual(rv(|-50-[x]-50-|) , [xn])
82 | XCTAssertEqual(rv([x]-10-[y]) , [xn, yn])
83 | XCTAssertEqual(rv([x]-0-[y]) , [xn, yn])
84 | XCTAssertEqual(rv([x,==100~20]) , [xn])
85 | XCTAssertEqual(rv([x,==y]) , [xn, yn])
86 | XCTAssertEqual(rv([x,>=70,<=100]) , [xn])
87 | XCTAssertEqual(rv(|-[x]-[y]-[z,>=20]-|) , [xn, yn, zn])
88 | }
89 | }
90 |
91 | func testOptions() {
92 | let x : ViewExpression = .view(LayoutViewName(view: UIView(), index: 1))
93 |
94 | XCTAssertEqual(opt(|[x]|) , NSLayoutFormatOptions())
95 | XCTAssertEqual(opt(|[x]| % .alignAllCenterY), NSLayoutFormatOptions.alignAllCenterY)
96 | }
97 |
98 | func testCapture() {
99 | let par = UIView()
100 | let v = UIView()
101 | par.addSubview(v)
102 |
103 | var q1: [AnyObject]?
104 | visualFormat(v) { v in
105 | q1 = .h ~ |-[v]
106 | }
107 | XCTAssertEqual((q1!).count, 1)
108 |
109 | var q2: [AnyObject]?
110 | visualFormat(v) { v in
111 | q2 = .h ~ |-[v]-|
112 | }
113 | XCTAssertEqual((q2!).count, 2)
114 | }
115 | }
116 |
--------------------------------------------------------------------------------
/Tests/yavflTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Tests/yavflTests/yavflTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // yavflTests.swift
3 | // yavflTests
4 | //
5 | // Created by Safx Developer on 2015/01/26.
6 | // Copyright (c) 2015年 Safx Developers. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import XCTest
11 | @testable import yavfl
12 |
13 | extension LayoutViewName: Equatable {}
14 | public func == (lhs: LayoutViewName, rhs: LayoutViewName) -> Bool {
15 | return lhs.index == rhs.index && lhs.view === rhs.view
16 | }
17 |
18 |
19 | class yavflTests: XCTestCase {
20 |
21 | func vf(_ vf: VisualFormat) -> String {
22 | return vf.description
23 | }
24 |
25 | func opt(_ vf: VisualFormat) -> NSLayoutFormatOptions {
26 | return vf.options
27 | }
28 |
29 | func rv(_ vf: VisualFormat) -> [LayoutViewName] {
30 | return vf.relatedViews
31 | }
32 |
33 | func testVisualFormat() {
34 | let x : ViewExpression = .view(LayoutViewName(view: UIView(), index: 1))
35 | let y : ViewExpression = .view(LayoutViewName(view: UIView(), index: 2))
36 | let z : ViewExpression = .view(LayoutViewName(view: UIView(), index: 3))
37 |
38 | XCTAssertEqual(vf(|[x]|) , "|[v1]|")
39 | XCTAssertEqual(vf(|-[x]|) , "|-[v1]|")
40 | XCTAssertEqual(vf(|[x]-|) , "|[v1]-|")
41 | XCTAssertEqual(vf(|-[x]-|) , "|-[v1]-|")
42 | XCTAssertEqual(vf(|-10-[x]-20-|) , "|-10-[v1]-20-|")
43 | XCTAssertEqual(vf(|-(>=100)-[x]-0-|) , "|-(>=100)-[v1]-0-|")
44 | XCTAssertEqual(vf(|-[x]-(>=99)-|) , "|-[v1]-(>=99)-|")
45 | XCTAssertEqual(vf([x,<=y~1000]) , "[v1(<=v2@1000)]")
46 | XCTAssertEqual(vf(|-0-[x,==200]-[y]-|), "|-0-[v1(==200)]-[v2]-|")
47 |
48 | XCTAssertEqual(vf([x]-[y]) , "[v1]-[v2]")
49 | XCTAssertEqual(vf([x,>=50]) , "[v1(>=50)]")
50 | XCTAssertEqual(vf(|-50-[x]-50-|) , "|-50-[v1]-50-|")
51 | XCTAssertEqual(vf([x]-10-[y]) , "[v1]-10-[v2]")
52 | XCTAssertEqual(vf([x]-0-[y]) , "[v1]-0-[v2]")
53 | XCTAssertEqual(vf([x,==100~20]) , "[v1(==100@20)]")
54 | XCTAssertEqual(vf([x,==y]) , "[v1(==v2)]")
55 | XCTAssertEqual(vf([x,>=70,<=100]) , "[v1(>=70,<=100)]")
56 | XCTAssertEqual(vf(|-[x]-[y]-[z,>=20]-|) , "|-[v1]-[v2]-[v3(>=20)]-|")
57 | }
58 |
59 | func testRelatedViews() {
60 | let x_ = UIView()
61 | let y_ = UIView()
62 | let z_ = UIView()
63 | let xn = LayoutViewName(view: x_, index: 1)
64 | let yn = LayoutViewName(view: y_, index: 2)
65 | let zn = LayoutViewName(view: z_, index: 3)
66 |
67 | visualFormat(x_, y_, z_) { x, y, z in
68 | XCTAssertEqual(rv(|[x]|) , [xn])
69 | XCTAssertEqual(rv(|-[x]|) , [xn])
70 | XCTAssertEqual(rv(|[x]-|) , [xn])
71 | XCTAssertEqual(rv(|-[x]-|) , [xn])
72 | XCTAssertEqual(rv(|-10-[x]-20-|) , [xn])
73 | XCTAssertEqual(rv(|-(>=100)-[x]-0-|) , [xn])
74 | XCTAssertEqual(rv(|-[x]-(>=99)-|) , [xn])
75 | XCTAssertEqual(rv([x,<=y~1000]) , [xn, yn])
76 | XCTAssertEqual(rv(|-0-[x,==200]-[y]-|), [xn, yn])
77 |
78 | XCTAssertEqual(rv([x]-[y]) , [xn, yn])
79 | XCTAssertEqual(rv([x,>=50]) , [xn])
80 | XCTAssertEqual(rv(|-50-[x]-50-|) , [xn])
81 | XCTAssertEqual(rv([x]-10-[y]) , [xn, yn])
82 | XCTAssertEqual(rv([x]-0-[y]) , [xn, yn])
83 | XCTAssertEqual(rv([x,==100~20]) , [xn])
84 | XCTAssertEqual(rv([x,==y]) , [xn, yn])
85 | XCTAssertEqual(rv([x,>=70,<=100]) , [xn])
86 | XCTAssertEqual(rv(|-[x]-[y]-[z,>=20]-|) , [xn, yn, zn])
87 | }
88 | }
89 |
90 | func testOptions() {
91 | let x : ViewExpression = .view(LayoutViewName(view: UIView(), index: 1))
92 |
93 | XCTAssertEqual(opt(|[x]|) , NSLayoutFormatOptions())
94 | XCTAssertEqual(opt(|[x]| % .alignAllCenterY), NSLayoutFormatOptions.alignAllCenterY)
95 | }
96 |
97 | func testCapture() {
98 | let par = UIView()
99 | let v = UIView()
100 | par.addSubview(v)
101 |
102 | var q1: [AnyObject]?
103 | visualFormat(v) { v in
104 | q1 = .h ~ |-[v]
105 | }
106 | XCTAssertEqual((q1!).count, 1)
107 |
108 | var q2: [AnyObject]?
109 | visualFormat(v) { v in
110 | q2 = .h ~ |-[v]-|
111 | }
112 | XCTAssertEqual((q2!).count, 2)
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/images/layout_sample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/safx/yavfl/bf89bfebed8cecaf0c5a383d56120f7c17ebb9de/images/layout_sample.png
--------------------------------------------------------------------------------
/yavfl.h:
--------------------------------------------------------------------------------
1 | //
2 | // yavfl.h
3 | // yavfl
4 | //
5 | // Created by Safx Developer on 2015/11/17.
6 | // Copyright © 2015年 Safx Developers. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for yavfl-tvos.
12 | FOUNDATION_EXPORT double yavfl_VersionNumber;
13 |
14 | //! Project version string for yavfl-tvos.
15 | FOUNDATION_EXPORT const unsigned char yavfl_VersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/yavfl.playground/Contents.swift:
--------------------------------------------------------------------------------
1 | // Playground - noun: a place where people can play
2 |
3 | import UIKit
4 | import XCPlayground
5 | import yavfl
6 |
7 | func Root(color: UIColor = .red) -> UIView {
8 | let v = UIView(frame: CGRect(x: 0, y: 0, width: 280, height: 150))
9 | v.layer.borderWidth = 1
10 | v.backgroundColor = .white
11 | return v
12 | }
13 |
14 | let root = Root()
15 |
16 | func View(text: String, color: UIColor = .red) -> UIView {
17 | let v = UILabel()
18 | v.text = text
19 | v.textAlignment = .center
20 | v.layer.borderWidth = 1
21 | v.layer.borderColor = color.cgColor
22 | root.addSubview(v)
23 | return v
24 | }
25 |
26 |
27 | let x = View(text: "x", color: .blue)
28 | let y = View(text: "y", color: .green)
29 |
30 | //: ### Sample 1
31 | visualFormat(x, y) { x, y in
32 | .v ~ |-20-[x,==80];
33 | .v ~ [y,==50];
34 | .h ~ |-20-[x,==y]-10-[y]-20-| % .alignAllCenterY
35 | }
36 |
37 |
38 | XCPlaygroundPage.currentPage.liveView = root
39 | root
40 |
--------------------------------------------------------------------------------
/yavfl.playground/contents.xcplayground:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/yavfl.playground/timeline.xctimeline:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
9 |
10 |
14 |
15 |
19 |
20 |
24 |
25 |
29 |
30 |
34 |
35 |
39 |
40 |
44 |
45 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/yavfl.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = "yavfl"
3 | s.version = "0.2.0"
4 | s.summary = "Yet Anoter Visual Format Language for Auto Layout in Swift"
5 | s.homepage = "https://github.com/safx/yavfl"
6 | s.license = { :type => "MIT", :file => "LICENSE" }
7 | s.author = { "MATSUMOTO Yuji" => "safxdev@gmail.com" }
8 | s.source = { :git => "https://github.com/safx/yavfl.git", :tag => s.version }
9 | s.source_files = "yavfl.swift"
10 | s.framework = 'Foundation'
11 | s.ios.deployment_target = "8.0"
12 | s.tvos.deployment_target = "9.0"
13 | s.osx.deployment_target = "10.10"
14 | s.requires_arc = true
15 | end
16 |
--------------------------------------------------------------------------------
/yavfl.swift:
--------------------------------------------------------------------------------
1 | //
2 | // yavfl.swift
3 | //
4 | // yavfl : Yet Another Visual Format Language for Auto layout
5 | //
6 | // Created by Safx Developer on 2014/12/08.
7 | // Copyright (c) 2014 Safx Developers. All rights reserved.
8 | //
9 |
10 |
11 | import Foundation
12 |
13 | #if os(iOS) || os(tvOS)
14 | import UIKit
15 | public typealias YAVView = UIView
16 | public typealias LayoutFormatOptions = NSLayoutFormatOptions
17 | #else
18 | import AppKit
19 | public typealias YAVView = NSView
20 | public typealias LayoutFormatOptions = NSLayoutConstraint.FormatOptions
21 | #endif
22 |
23 | public func visualFormat(_ v1: YAVView,
24 | closure: (ViewExpression) -> ()) {
25 | v1.translatesAutoresizingMaskIntoConstraints = false
26 |
27 | closure(.view(LayoutViewName(view: v1, index: 1)))
28 |
29 | v1.updateConstraints()
30 | }
31 |
32 | public func visualFormat(_ v1: YAVView, _ v2: YAVView,
33 | closure: (ViewExpression, ViewExpression) -> ()) {
34 | v1.translatesAutoresizingMaskIntoConstraints = false
35 | v2.translatesAutoresizingMaskIntoConstraints = false
36 |
37 | closure(.view(LayoutViewName(view: v1, index: 1)),
38 | .view(LayoutViewName(view: v2, index: 2)))
39 |
40 | v1.updateConstraints()
41 | v2.updateConstraints()
42 | }
43 |
44 | public func visualFormat(_ v1: YAVView, _ v2: YAVView, _ v3: YAVView,
45 | closure: (ViewExpression, ViewExpression, ViewExpression) -> ()) {
46 | v1.translatesAutoresizingMaskIntoConstraints = false
47 | v2.translatesAutoresizingMaskIntoConstraints = false
48 | v3.translatesAutoresizingMaskIntoConstraints = false
49 |
50 | closure(.view(LayoutViewName(view: v1, index: 1)),
51 | .view(LayoutViewName(view: v2, index: 2)),
52 | .view(LayoutViewName(view: v3, index: 3)))
53 |
54 | v1.updateConstraints()
55 | v2.updateConstraints()
56 | v3.updateConstraints()
57 | }
58 |
59 | public func visualFormat(_ v1: YAVView, _ v2: YAVView, _ v3: YAVView, _ v4: YAVView,
60 | closure: (ViewExpression, ViewExpression, ViewExpression, ViewExpression) -> ()) {
61 | v1.translatesAutoresizingMaskIntoConstraints = false
62 | v2.translatesAutoresizingMaskIntoConstraints = false
63 | v3.translatesAutoresizingMaskIntoConstraints = false
64 | v4.translatesAutoresizingMaskIntoConstraints = false
65 |
66 | closure(.view(LayoutViewName(view: v1, index: 1)),
67 | .view(LayoutViewName(view: v2, index: 2)),
68 | .view(LayoutViewName(view: v3, index: 3)),
69 | .view(LayoutViewName(view: v4, index: 4)))
70 |
71 | v1.updateConstraints()
72 | v2.updateConstraints()
73 | v3.updateConstraints()
74 | v4.updateConstraints()
75 | }
76 |
77 | public func visualFormat(_ v1: YAVView, _ v2: YAVView, _ v3: YAVView, _ v4: YAVView, _ v5: YAVView,
78 | closure: (ViewExpression, ViewExpression, ViewExpression, ViewExpression, ViewExpression) -> ()) {
79 | v1.translatesAutoresizingMaskIntoConstraints = false
80 | v2.translatesAutoresizingMaskIntoConstraints = false
81 | v3.translatesAutoresizingMaskIntoConstraints = false
82 | v4.translatesAutoresizingMaskIntoConstraints = false
83 | v5.translatesAutoresizingMaskIntoConstraints = false
84 |
85 | closure(.view(LayoutViewName(view: v1, index: 1)),
86 | .view(LayoutViewName(view: v2, index: 2)),
87 | .view(LayoutViewName(view: v3, index: 3)),
88 | .view(LayoutViewName(view: v4, index: 4)),
89 | .view(LayoutViewName(view: v5, index: 5)))
90 |
91 | v1.updateConstraints()
92 | v2.updateConstraints()
93 | v3.updateConstraints()
94 | v4.updateConstraints()
95 | v5.updateConstraints()
96 | }
97 |
98 | // MARK:
99 |
100 | public enum ViewExpression {
101 | case view(LayoutViewName)
102 | case predicate(LayoutPredicate)
103 | }
104 |
105 | // MARK:
106 |
107 | public struct LayoutViewName : CustomStringConvertible {
108 | internal let view: YAVView
109 | internal let index: Int
110 |
111 | public var description: String {
112 | return "v" + String(index)
113 | }
114 | }
115 |
116 | // MARK:
117 |
118 | public struct LayoutPredicate : CustomStringConvertible {
119 | fileprivate let relation: LayoutRelation
120 | fileprivate let object: LayoutObjectOfPredicate
121 | fileprivate let priority: Int?
122 |
123 | public var description: String {
124 | let d = relation.rawValue + object.description
125 | guard let p = priority else { return d }
126 | return d + "@" + String(p)
127 | }
128 | }
129 |
130 | // MARK:
131 |
132 | public enum LayoutRelation : String {
133 | case equal = "=="
134 | case greaterThanOrEqual = ">="
135 | case lessThanOrEqual = "<="
136 | }
137 |
138 | // MARK:
139 |
140 | public enum LayoutObjectOfPredicate : CustomStringConvertible {
141 | case constant(Int)
142 | case view(LayoutViewName)
143 |
144 | public var description: String {
145 | switch self {
146 | case .constant(let n): return String(n)
147 | case .view(let view): return view.description
148 | }
149 | }
150 | }
151 |
152 | // MARK:
153 |
154 | public enum LayoutOrientation : String {
155 | case v = "V"
156 | case h = "H"
157 | }
158 |
159 | // MARK:
160 |
161 | public struct LayoutView : CustomStringConvertible {
162 | fileprivate let view: LayoutViewName
163 | fileprivate let predicates: [LayoutPredicate]
164 |
165 | public var description: String {
166 | let v = view.description
167 | if predicates.isEmpty { return v }
168 | return v + "(" + predicates.map { $0.description } .joined(separator: ",") + ")"
169 | }
170 |
171 | internal var relatedViews: [LayoutViewName] {
172 | return [view] + predicates.flatMap { e -> LayoutViewName? in
173 | switch e.object {
174 | case .view(let v): return v
175 | default: return nil
176 | }
177 | }
178 | }
179 |
180 | fileprivate init(_ elements: [ViewExpression]) {
181 | guard let view_part = elements.first, case let .view(v) = view_part else {
182 | fatalError("View expected")
183 | }
184 | view = v
185 |
186 | let pred_part = elements.dropFirst()
187 | predicates = pred_part.map { e in
188 | if case let .predicate(p) = e { return p }
189 | fatalError("Predicate expected")
190 | }
191 | }
192 | }
193 |
194 | // MARK:
195 |
196 | public enum VisualFormat : CustomStringConvertible, ExpressibleByIntegerLiteral, ExpressibleByArrayLiteral {
197 | case superview
198 | case view(LayoutView)
199 | case connection
200 | case predicate(LayoutPredicate)
201 | case number(Int)
202 | case composition([VisualFormat])
203 | case options(LayoutFormatOptions)
204 |
205 | public var description: String {
206 | switch self {
207 | case .superview: return "|"
208 | case .view(let v): return "[" + v.description + "]"
209 | case .connection: return "-"
210 | case .predicate(let p): return "(" + p.description + ")"
211 | case .number(let n): return String(n)
212 | case .composition(let c): return c.map { $0.description } .joined(separator: "")
213 | case .options: return ""
214 | }
215 | }
216 |
217 | // FIXME: report error for multiple options
218 | internal var options: LayoutFormatOptions {
219 | switch self {
220 | case .options(let opts): return opts
221 | case .composition(let c):
222 | for case let .options(o) in c { return o }
223 | default: ()
224 | }
225 | return LayoutFormatOptions()
226 | }
227 |
228 | internal var relatedViews: [LayoutViewName] {
229 | switch self {
230 | case .view(let v): return v.relatedViews
231 | case .composition(let c): return c.flatMap { $0.relatedViews }
232 | default: return []
233 | }
234 | }
235 |
236 | internal var viewsDictionary: [String:AnyObject] {
237 | var d = [String:AnyObject]()
238 | relatedViews.forEach { d[$0.description] = $0.view }
239 | return d
240 | }
241 |
242 | public init(integerLiteral value: IntegerLiteralType) {
243 | self = .number(value)
244 | }
245 |
246 | public init(arrayLiteral elements: ViewExpression...) {
247 | self = .view(LayoutView(elements))
248 | }
249 |
250 | fileprivate init(composition elements: VisualFormat...) {
251 | let t = elements.flatMap { e -> [VisualFormat] in
252 | switch e {
253 | case .composition(let c): return c
254 | default: return [e]
255 | }
256 | }
257 | self = .composition(t)
258 | }
259 | }
260 |
261 | // MARK: helper funcs
262 |
263 | private func createVisualFormatPredicate(view: ViewExpression, priority: Int? = nil) -> VisualFormat {
264 | if case let .predicate(p) = view {
265 | return .predicate(LayoutPredicate(relation: p.relation, object: p.object, priority: priority))
266 | }
267 | fatalError("Error")
268 | }
269 |
270 | private func createViewExpressionPredicate(view: ViewExpression, relation: LayoutRelation) -> ViewExpression {
271 | if case let .view(v) = view {
272 | return .predicate(LayoutPredicate(relation: relation, object: .view(v), priority: nil))
273 | }
274 | fatalError("Error")
275 | }
276 |
277 | // MARK: - operators
278 |
279 | prefix operator |
280 |
281 | public prefix func |(e: VisualFormat) -> VisualFormat {
282 | return VisualFormat(composition: .superview, e)
283 | }
284 |
285 |
286 | postfix operator |
287 |
288 | public postfix func |(e: VisualFormat) -> VisualFormat {
289 | return VisualFormat(composition: e, .superview)
290 | }
291 |
292 |
293 | prefix operator |-
294 |
295 | public prefix func |-(e: VisualFormat) -> VisualFormat {
296 | return VisualFormat(composition: .superview, .connection, e)
297 | }
298 |
299 | public prefix func |-(e: (ViewExpression)) -> VisualFormat {
300 | return VisualFormat(composition: .superview, .connection, createVisualFormatPredicate(view: e))
301 | }
302 |
303 |
304 | postfix operator -|
305 |
306 | public postfix func -|(e: VisualFormat) -> VisualFormat {
307 | return VisualFormat(composition: e, .connection, .superview)
308 | }
309 |
310 | public postfix func -|(e: (ViewExpression)) -> VisualFormat {
311 | return VisualFormat(composition: createVisualFormatPredicate(view: e), .connection, .superview)
312 | }
313 |
314 | //infix operator -: AdditionPrecedence
315 |
316 | public func -(lhs: VisualFormat, rhs: VisualFormat) -> VisualFormat {
317 | return VisualFormat(composition: lhs, .connection, rhs)
318 | }
319 |
320 | public func -(lhs: VisualFormat, rhs: (ViewExpression)) -> VisualFormat {
321 | return VisualFormat(composition: lhs, .connection, createVisualFormatPredicate(view: rhs))
322 | }
323 |
324 |
325 | prefix operator ==
326 |
327 | public prefix func ==(n: Int) -> ViewExpression {
328 | return .predicate(LayoutPredicate(relation: .equal, object: .constant(n), priority: nil))
329 | }
330 |
331 | public prefix func ==(view: ViewExpression) -> ViewExpression {
332 | return createViewExpressionPredicate(view: view, relation: .equal)
333 | }
334 |
335 |
336 | prefix operator <=
337 |
338 | public prefix func <=(n: Int) -> ViewExpression {
339 | return .predicate(LayoutPredicate(relation: .lessThanOrEqual, object: .constant(n), priority: nil))
340 | }
341 |
342 | public prefix func <=(view: ViewExpression) -> ViewExpression {
343 | return createViewExpressionPredicate(view: view, relation: .lessThanOrEqual)
344 | }
345 |
346 |
347 | prefix operator >=
348 |
349 | public prefix func >=(n: Int) -> ViewExpression {
350 | return .predicate(LayoutPredicate(relation: .greaterThanOrEqual, object: .constant(n), priority: nil))
351 | }
352 |
353 | public prefix func >=(view: ViewExpression) -> ViewExpression {
354 | return createViewExpressionPredicate(view: view, relation: .greaterThanOrEqual)
355 | }
356 |
357 |
358 | //infix operator % {}
359 |
360 | public func %(lhs: VisualFormat, rhs: LayoutFormatOptions) -> VisualFormat {
361 | return VisualFormat(composition: lhs, .options(rhs))
362 | }
363 |
364 |
365 | infix operator ~: AssignmentPrecedence
366 |
367 | @discardableResult
368 | public func ~(lhs: ViewExpression, rhs: Int) -> ViewExpression {
369 | if case let .predicate(p) = lhs {
370 | return .predicate(LayoutPredicate(relation: p.relation, object: p.object, priority: rhs))
371 | }
372 | fatalError("Error")
373 | }
374 |
375 | @discardableResult
376 | public func ~(lhs: LayoutOrientation, rhs: VisualFormat) -> [AnyObject] {
377 | let exp = lhs.rawValue + ":" + rhs.description
378 | let c = NSLayoutConstraint.constraints(withVisualFormat: exp, options: rhs.options, metrics: nil, views: rhs.viewsDictionary)
379 | NSLayoutConstraint.activate(c)
380 | return c
381 | }
382 |
--------------------------------------------------------------------------------
/yavfl.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 8D556EF71A727791004FA111 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D556EF61A727791004FA111 /* AppDelegate.swift */; };
11 | 8D556EF91A727791004FA111 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D556EF81A727791004FA111 /* ViewController.swift */; };
12 | 8D556EFB1A727791004FA111 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8D556EFA1A727791004FA111 /* Images.xcassets */; };
13 | 8D556EFE1A727791004FA111 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8D556EFC1A727791004FA111 /* Main.storyboard */; };
14 | 8D7AC98E1A7547BB00574AAC /* yavfl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D7AC9831A7547BB00574AAC /* yavfl.framework */; };
15 | 8D7AC9971A7547BC00574AAC /* yavflTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D7AC9961A7547BB00574AAC /* yavflTests.swift */; };
16 | 8D7AC99A1A7547BC00574AAC /* yavfl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D7AC9831A7547BB00574AAC /* yavfl.framework */; };
17 | 8D7AC99B1A7547BC00574AAC /* yavfl.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8D7AC9831A7547BB00574AAC /* yavfl.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
18 | 8D7AC9A21A7547C300574AAC /* yavfl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1B0F71A349D2500295741 /* yavfl.swift */; };
19 | 8D7AC9B41A75495900574AAC /* yavfl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D7AC9A91A75495900574AAC /* yavfl.framework */; };
20 | 8D7AC9BD1A75495900574AAC /* yavflOSXTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D7AC9BC1A75495900574AAC /* yavflOSXTests.swift */; };
21 | 8D7AC9C01A75495900574AAC /* yavfl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D7AC9A91A75495900574AAC /* yavfl.framework */; };
22 | 8D7AC9C11A75495900574AAC /* yavfl.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8D7AC9A91A75495900574AAC /* yavfl.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
23 | 8D7AC9C81A75496F00574AAC /* yavfl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1B0F71A349D2500295741 /* yavfl.swift */; };
24 | 8DEC2B511BFB58E40083EC9D /* yavfl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1B0F71A349D2500295741 /* yavfl.swift */; };
25 | 8DEC2B591BFB594F0083EC9D /* yavflTests_tvos.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DEC2B581BFB594F0083EC9D /* yavflTests_tvos.swift */; };
26 | 8DEC2B5B1BFB594F0083EC9D /* yavfl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DEC2B451BFB57D00083EC9D /* yavfl.framework */; };
27 | 8DF1B0D71A349BC200295741 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1B0D61A349BC200295741 /* AppDelegate.swift */; };
28 | 8DF1B0D91A349BC200295741 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1B0D81A349BC200295741 /* ViewController.swift */; };
29 | 8DF1B0DC1A349BC200295741 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8DF1B0DA1A349BC200295741 /* Main.storyboard */; };
30 | 8DF1B0DE1A349BC200295741 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8DF1B0DD1A349BC200295741 /* Images.xcassets */; };
31 | 8DF2D42D1B2AF45B005D77DC /* yavfl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1B0F71A349D2500295741 /* yavfl.swift */; };
32 | 8DF2D42E1B2AF45C005D77DC /* yavfl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1B0F71A349D2500295741 /* yavfl.swift */; };
33 | /* End PBXBuildFile section */
34 |
35 | /* Begin PBXContainerItemProxy section */
36 | 8D7AC98F1A7547BB00574AAC /* PBXContainerItemProxy */ = {
37 | isa = PBXContainerItemProxy;
38 | containerPortal = 8DF1B0C91A349BC200295741 /* Project object */;
39 | proxyType = 1;
40 | remoteGlobalIDString = 8D7AC9821A7547BB00574AAC;
41 | remoteInfo = yavfl;
42 | };
43 | 8D7AC9911A7547BB00574AAC /* PBXContainerItemProxy */ = {
44 | isa = PBXContainerItemProxy;
45 | containerPortal = 8DF1B0C91A349BC200295741 /* Project object */;
46 | proxyType = 1;
47 | remoteGlobalIDString = 8DF1B0D01A349BC200295741;
48 | remoteInfo = "yavflSample-iOS";
49 | };
50 | 8D7AC9981A7547BC00574AAC /* PBXContainerItemProxy */ = {
51 | isa = PBXContainerItemProxy;
52 | containerPortal = 8DF1B0C91A349BC200295741 /* Project object */;
53 | proxyType = 1;
54 | remoteGlobalIDString = 8D7AC9821A7547BB00574AAC;
55 | remoteInfo = yavfl;
56 | };
57 | 8D7AC9B51A75495900574AAC /* PBXContainerItemProxy */ = {
58 | isa = PBXContainerItemProxy;
59 | containerPortal = 8DF1B0C91A349BC200295741 /* Project object */;
60 | proxyType = 1;
61 | remoteGlobalIDString = 8D7AC9A81A75495900574AAC;
62 | remoteInfo = yavflOSX;
63 | };
64 | 8D7AC9B71A75495900574AAC /* PBXContainerItemProxy */ = {
65 | isa = PBXContainerItemProxy;
66 | containerPortal = 8DF1B0C91A349BC200295741 /* Project object */;
67 | proxyType = 1;
68 | remoteGlobalIDString = 8D556EF11A727791004FA111;
69 | remoteInfo = "yavflSample-OSX";
70 | };
71 | 8D7AC9BE1A75495900574AAC /* PBXContainerItemProxy */ = {
72 | isa = PBXContainerItemProxy;
73 | containerPortal = 8DF1B0C91A349BC200295741 /* Project object */;
74 | proxyType = 1;
75 | remoteGlobalIDString = 8D7AC9A81A75495900574AAC;
76 | remoteInfo = yavflOSX;
77 | };
78 | 8DEC2B5C1BFB594F0083EC9D /* PBXContainerItemProxy */ = {
79 | isa = PBXContainerItemProxy;
80 | containerPortal = 8DF1B0C91A349BC200295741 /* Project object */;
81 | proxyType = 1;
82 | remoteGlobalIDString = 8DEC2B441BFB57D00083EC9D;
83 | remoteInfo = "yavfl-tvos";
84 | };
85 | /* End PBXContainerItemProxy section */
86 |
87 | /* Begin PBXCopyFilesBuildPhase section */
88 | 8D7AC9511A7546A200574AAC /* Embed Frameworks */ = {
89 | isa = PBXCopyFilesBuildPhase;
90 | buildActionMask = 2147483647;
91 | dstPath = "";
92 | dstSubfolderSpec = 10;
93 | files = (
94 | 8D7AC99B1A7547BC00574AAC /* yavfl.framework in Embed Frameworks */,
95 | );
96 | name = "Embed Frameworks";
97 | runOnlyForDeploymentPostprocessing = 0;
98 | };
99 | 8D7AC9761A7546E200574AAC /* Embed Frameworks */ = {
100 | isa = PBXCopyFilesBuildPhase;
101 | buildActionMask = 2147483647;
102 | dstPath = "";
103 | dstSubfolderSpec = 10;
104 | files = (
105 | 8D7AC9C11A75495900574AAC /* yavfl.framework in Embed Frameworks */,
106 | );
107 | name = "Embed Frameworks";
108 | runOnlyForDeploymentPostprocessing = 0;
109 | };
110 | /* End PBXCopyFilesBuildPhase section */
111 |
112 | /* Begin PBXFileReference section */
113 | 8D556EF21A727791004FA111 /* yavflSample-OSX.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "yavflSample-OSX.app"; sourceTree = BUILT_PRODUCTS_DIR; };
114 | 8D556EF51A727791004FA111 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
115 | 8D556EF61A727791004FA111 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
116 | 8D556EF81A727791004FA111 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
117 | 8D556EFA1A727791004FA111 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
118 | 8D556EFD1A727791004FA111 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
119 | 8D57035A1A9F386D00AB719F /* yavfl.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = yavfl.playground; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
120 | 8D7AC9831A7547BB00574AAC /* yavfl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = yavfl.framework; sourceTree = BUILT_PRODUCTS_DIR; };
121 | 8D7AC9861A7547BB00574AAC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
122 | 8D7AC98D1A7547BB00574AAC /* yavflTests-iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "yavflTests-iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
123 | 8D7AC9951A7547BB00574AAC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = yavflTests/Info.plist; sourceTree = ""; };
124 | 8D7AC9961A7547BB00574AAC /* yavflTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = yavflTests.swift; path = yavflTests/yavflTests.swift; sourceTree = ""; };
125 | 8D7AC9A91A75495900574AAC /* yavfl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = yavfl.framework; sourceTree = BUILT_PRODUCTS_DIR; };
126 | 8D7AC9B31A75495900574AAC /* yavflTests-OSX.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "yavflTests-OSX.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
127 | 8D7AC9BB1A75495900574AAC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
128 | 8D7AC9BC1A75495900574AAC /* yavflOSXTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = yavflOSXTests.swift; sourceTree = ""; };
129 | 8DEC2B451BFB57D00083EC9D /* yavfl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = yavfl.framework; sourceTree = BUILT_PRODUCTS_DIR; };
130 | 8DEC2B4D1BFB58CC0083EC9D /* yavfl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = yavfl.h; sourceTree = ""; };
131 | 8DEC2B561BFB594F0083EC9D /* yavflTests-tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "yavflTests-tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
132 | 8DEC2B581BFB594F0083EC9D /* yavflTests_tvos.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = yavflTests_tvos.swift; sourceTree = ""; };
133 | 8DEC2B5A1BFB594F0083EC9D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
134 | 8DF1B0D11A349BC200295741 /* yavflSample-iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "yavflSample-iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
135 | 8DF1B0D51A349BC200295741 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
136 | 8DF1B0D61A349BC200295741 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
137 | 8DF1B0D81A349BC200295741 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
138 | 8DF1B0DB1A349BC200295741 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
139 | 8DF1B0DD1A349BC200295741 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
140 | 8DF1B0F71A349D2500295741 /* yavfl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = yavfl.swift; sourceTree = ""; };
141 | /* End PBXFileReference section */
142 |
143 | /* Begin PBXFrameworksBuildPhase section */
144 | 8D556EEF1A727791004FA111 /* Frameworks */ = {
145 | isa = PBXFrameworksBuildPhase;
146 | buildActionMask = 2147483647;
147 | files = (
148 | 8D7AC9C01A75495900574AAC /* yavfl.framework in Frameworks */,
149 | );
150 | runOnlyForDeploymentPostprocessing = 0;
151 | };
152 | 8D7AC97F1A7547BB00574AAC /* Frameworks */ = {
153 | isa = PBXFrameworksBuildPhase;
154 | buildActionMask = 2147483647;
155 | files = (
156 | );
157 | runOnlyForDeploymentPostprocessing = 0;
158 | };
159 | 8D7AC98A1A7547BB00574AAC /* Frameworks */ = {
160 | isa = PBXFrameworksBuildPhase;
161 | buildActionMask = 2147483647;
162 | files = (
163 | 8D7AC98E1A7547BB00574AAC /* yavfl.framework in Frameworks */,
164 | );
165 | runOnlyForDeploymentPostprocessing = 0;
166 | };
167 | 8D7AC9A51A75495900574AAC /* Frameworks */ = {
168 | isa = PBXFrameworksBuildPhase;
169 | buildActionMask = 2147483647;
170 | files = (
171 | );
172 | runOnlyForDeploymentPostprocessing = 0;
173 | };
174 | 8D7AC9B01A75495900574AAC /* Frameworks */ = {
175 | isa = PBXFrameworksBuildPhase;
176 | buildActionMask = 2147483647;
177 | files = (
178 | 8D7AC9B41A75495900574AAC /* yavfl.framework in Frameworks */,
179 | );
180 | runOnlyForDeploymentPostprocessing = 0;
181 | };
182 | 8DEC2B411BFB57D00083EC9D /* Frameworks */ = {
183 | isa = PBXFrameworksBuildPhase;
184 | buildActionMask = 2147483647;
185 | files = (
186 | );
187 | runOnlyForDeploymentPostprocessing = 0;
188 | };
189 | 8DEC2B531BFB594F0083EC9D /* Frameworks */ = {
190 | isa = PBXFrameworksBuildPhase;
191 | buildActionMask = 2147483647;
192 | files = (
193 | 8DEC2B5B1BFB594F0083EC9D /* yavfl.framework in Frameworks */,
194 | );
195 | runOnlyForDeploymentPostprocessing = 0;
196 | };
197 | 8DF1B0CE1A349BC200295741 /* Frameworks */ = {
198 | isa = PBXFrameworksBuildPhase;
199 | buildActionMask = 2147483647;
200 | files = (
201 | 8D7AC99A1A7547BC00574AAC /* yavfl.framework in Frameworks */,
202 | );
203 | runOnlyForDeploymentPostprocessing = 0;
204 | };
205 | /* End PBXFrameworksBuildPhase section */
206 |
207 | /* Begin PBXGroup section */
208 | 8D556EF31A727791004FA111 /* yavflSample-OSX */ = {
209 | isa = PBXGroup;
210 | children = (
211 | 8D556EF61A727791004FA111 /* AppDelegate.swift */,
212 | 8D556EF81A727791004FA111 /* ViewController.swift */,
213 | 8D556EFA1A727791004FA111 /* Images.xcassets */,
214 | 8D556EFC1A727791004FA111 /* Main.storyboard */,
215 | 8D556EF41A727791004FA111 /* Supporting Files */,
216 | );
217 | name = "yavflSample-OSX";
218 | path = "Sample/yavflSample-OSX";
219 | sourceTree = "";
220 | };
221 | 8D556EF41A727791004FA111 /* Supporting Files */ = {
222 | isa = PBXGroup;
223 | children = (
224 | 8D556EF51A727791004FA111 /* Info.plist */,
225 | );
226 | name = "Supporting Files";
227 | sourceTree = "";
228 | };
229 | 8D7AC9931A7547BB00574AAC /* yavflTests */ = {
230 | isa = PBXGroup;
231 | children = (
232 | 8D7AC9961A7547BB00574AAC /* yavflTests.swift */,
233 | 8D7AC9941A7547BB00574AAC /* Supporting Files */,
234 | );
235 | name = yavflTests;
236 | path = Tests;
237 | sourceTree = "";
238 | };
239 | 8D7AC9941A7547BB00574AAC /* Supporting Files */ = {
240 | isa = PBXGroup;
241 | children = (
242 | 8D7AC9951A7547BB00574AAC /* Info.plist */,
243 | );
244 | name = "Supporting Files";
245 | sourceTree = "";
246 | };
247 | 8D7AC9B91A75495900574AAC /* yavflOSXTests */ = {
248 | isa = PBXGroup;
249 | children = (
250 | 8D7AC9BC1A75495900574AAC /* yavflOSXTests.swift */,
251 | 8D7AC9BA1A75495900574AAC /* Supporting Files */,
252 | );
253 | name = yavflOSXTests;
254 | path = Tests/yavflOSXTests;
255 | sourceTree = "";
256 | };
257 | 8D7AC9BA1A75495900574AAC /* Supporting Files */ = {
258 | isa = PBXGroup;
259 | children = (
260 | 8D7AC9BB1A75495900574AAC /* Info.plist */,
261 | );
262 | name = "Supporting Files";
263 | sourceTree = "";
264 | };
265 | 8DEC2B571BFB594F0083EC9D /* yavflTests-tvos */ = {
266 | isa = PBXGroup;
267 | children = (
268 | 8DEC2B581BFB594F0083EC9D /* yavflTests_tvos.swift */,
269 | 8DEC2B5A1BFB594F0083EC9D /* Info.plist */,
270 | );
271 | name = "yavflTests-tvos";
272 | path = "Tests/yavflTests-tvos";
273 | sourceTree = "";
274 | };
275 | 8DF1B0C81A349BC200295741 = {
276 | isa = PBXGroup;
277 | children = (
278 | 8D57035A1A9F386D00AB719F /* yavfl.playground */,
279 | 8DF1B0F61A349D0D00295741 /* yavfl */,
280 | 8DF1B0D31A349BC200295741 /* yavflSample-iOS */,
281 | 8D556EF31A727791004FA111 /* yavflSample-OSX */,
282 | 8D7AC9931A7547BB00574AAC /* yavflTests */,
283 | 8D7AC9B91A75495900574AAC /* yavflOSXTests */,
284 | 8DEC2B571BFB594F0083EC9D /* yavflTests-tvos */,
285 | 8DF1B0D21A349BC200295741 /* Products */,
286 | );
287 | sourceTree = "";
288 | };
289 | 8DF1B0D21A349BC200295741 /* Products */ = {
290 | isa = PBXGroup;
291 | children = (
292 | 8DF1B0D11A349BC200295741 /* yavflSample-iOS.app */,
293 | 8D556EF21A727791004FA111 /* yavflSample-OSX.app */,
294 | 8D7AC9831A7547BB00574AAC /* yavfl.framework */,
295 | 8D7AC98D1A7547BB00574AAC /* yavflTests-iOS.xctest */,
296 | 8D7AC9A91A75495900574AAC /* yavfl.framework */,
297 | 8D7AC9B31A75495900574AAC /* yavflTests-OSX.xctest */,
298 | 8DEC2B451BFB57D00083EC9D /* yavfl.framework */,
299 | 8DEC2B561BFB594F0083EC9D /* yavflTests-tvOS.xctest */,
300 | );
301 | name = Products;
302 | sourceTree = "";
303 | };
304 | 8DF1B0D31A349BC200295741 /* yavflSample-iOS */ = {
305 | isa = PBXGroup;
306 | children = (
307 | 8DF1B0D61A349BC200295741 /* AppDelegate.swift */,
308 | 8DF1B0D81A349BC200295741 /* ViewController.swift */,
309 | 8DF1B0DA1A349BC200295741 /* Main.storyboard */,
310 | 8DF1B0DD1A349BC200295741 /* Images.xcassets */,
311 | 8DF1B0D41A349BC200295741 /* Supporting Files */,
312 | );
313 | name = "yavflSample-iOS";
314 | path = "Sample/yavflSample-iOS";
315 | sourceTree = "";
316 | };
317 | 8DF1B0D41A349BC200295741 /* Supporting Files */ = {
318 | isa = PBXGroup;
319 | children = (
320 | 8DF1B0D51A349BC200295741 /* Info.plist */,
321 | );
322 | name = "Supporting Files";
323 | sourceTree = "";
324 | };
325 | 8DF1B0F61A349D0D00295741 /* yavfl */ = {
326 | isa = PBXGroup;
327 | children = (
328 | 8DF1B0F71A349D2500295741 /* yavfl.swift */,
329 | 8DEC2B4D1BFB58CC0083EC9D /* yavfl.h */,
330 | 8D7AC9861A7547BB00574AAC /* Info.plist */,
331 | );
332 | name = yavfl;
333 | sourceTree = "";
334 | };
335 | /* End PBXGroup section */
336 |
337 | /* Begin PBXHeadersBuildPhase section */
338 | 8D7AC9801A7547BB00574AAC /* Headers */ = {
339 | isa = PBXHeadersBuildPhase;
340 | buildActionMask = 2147483647;
341 | files = (
342 | );
343 | runOnlyForDeploymentPostprocessing = 0;
344 | };
345 | 8D7AC9A61A75495900574AAC /* Headers */ = {
346 | isa = PBXHeadersBuildPhase;
347 | buildActionMask = 2147483647;
348 | files = (
349 | );
350 | runOnlyForDeploymentPostprocessing = 0;
351 | };
352 | 8DEC2B421BFB57D00083EC9D /* Headers */ = {
353 | isa = PBXHeadersBuildPhase;
354 | buildActionMask = 2147483647;
355 | files = (
356 | );
357 | runOnlyForDeploymentPostprocessing = 0;
358 | };
359 | /* End PBXHeadersBuildPhase section */
360 |
361 | /* Begin PBXNativeTarget section */
362 | 8D556EF11A727791004FA111 /* yavflSample-OSX */ = {
363 | isa = PBXNativeTarget;
364 | buildConfigurationList = 8D556F0F1A727791004FA111 /* Build configuration list for PBXNativeTarget "yavflSample-OSX" */;
365 | buildPhases = (
366 | 8D556EEE1A727791004FA111 /* Sources */,
367 | 8D556EEF1A727791004FA111 /* Frameworks */,
368 | 8D556EF01A727791004FA111 /* Resources */,
369 | 8D7AC9761A7546E200574AAC /* Embed Frameworks */,
370 | );
371 | buildRules = (
372 | );
373 | dependencies = (
374 | 8D7AC9BF1A75495900574AAC /* PBXTargetDependency */,
375 | );
376 | name = "yavflSample-OSX";
377 | productName = "yavflSample-OSX";
378 | productReference = 8D556EF21A727791004FA111 /* yavflSample-OSX.app */;
379 | productType = "com.apple.product-type.application";
380 | };
381 | 8D7AC9821A7547BB00574AAC /* yavfl-iOS */ = {
382 | isa = PBXNativeTarget;
383 | buildConfigurationList = 8D7AC99C1A7547BC00574AAC /* Build configuration list for PBXNativeTarget "yavfl-iOS" */;
384 | buildPhases = (
385 | 8D7AC97E1A7547BB00574AAC /* Sources */,
386 | 8D7AC97F1A7547BB00574AAC /* Frameworks */,
387 | 8D7AC9801A7547BB00574AAC /* Headers */,
388 | 8D7AC9811A7547BB00574AAC /* Resources */,
389 | );
390 | buildRules = (
391 | );
392 | dependencies = (
393 | );
394 | name = "yavfl-iOS";
395 | productName = yavfl;
396 | productReference = 8D7AC9831A7547BB00574AAC /* yavfl.framework */;
397 | productType = "com.apple.product-type.framework";
398 | };
399 | 8D7AC98C1A7547BB00574AAC /* yavflTests-iOS */ = {
400 | isa = PBXNativeTarget;
401 | buildConfigurationList = 8D7AC99F1A7547BC00574AAC /* Build configuration list for PBXNativeTarget "yavflTests-iOS" */;
402 | buildPhases = (
403 | 8D7AC9891A7547BB00574AAC /* Sources */,
404 | 8D7AC98A1A7547BB00574AAC /* Frameworks */,
405 | 8D7AC98B1A7547BB00574AAC /* Resources */,
406 | );
407 | buildRules = (
408 | );
409 | dependencies = (
410 | 8D7AC9901A7547BB00574AAC /* PBXTargetDependency */,
411 | 8D7AC9921A7547BB00574AAC /* PBXTargetDependency */,
412 | );
413 | name = "yavflTests-iOS";
414 | productName = yavflTests;
415 | productReference = 8D7AC98D1A7547BB00574AAC /* yavflTests-iOS.xctest */;
416 | productType = "com.apple.product-type.bundle.unit-test";
417 | };
418 | 8D7AC9A81A75495900574AAC /* yavfl-OSX */ = {
419 | isa = PBXNativeTarget;
420 | buildConfigurationList = 8D7AC9C21A75495900574AAC /* Build configuration list for PBXNativeTarget "yavfl-OSX" */;
421 | buildPhases = (
422 | 8D7AC9A41A75495900574AAC /* Sources */,
423 | 8D7AC9A51A75495900574AAC /* Frameworks */,
424 | 8D7AC9A61A75495900574AAC /* Headers */,
425 | 8D7AC9A71A75495900574AAC /* Resources */,
426 | );
427 | buildRules = (
428 | );
429 | dependencies = (
430 | );
431 | name = "yavfl-OSX";
432 | productName = yavflOSX;
433 | productReference = 8D7AC9A91A75495900574AAC /* yavfl.framework */;
434 | productType = "com.apple.product-type.framework";
435 | };
436 | 8D7AC9B21A75495900574AAC /* yavflTests-OSX */ = {
437 | isa = PBXNativeTarget;
438 | buildConfigurationList = 8D7AC9C51A75495900574AAC /* Build configuration list for PBXNativeTarget "yavflTests-OSX" */;
439 | buildPhases = (
440 | 8D7AC9AF1A75495900574AAC /* Sources */,
441 | 8D7AC9B01A75495900574AAC /* Frameworks */,
442 | 8D7AC9B11A75495900574AAC /* Resources */,
443 | );
444 | buildRules = (
445 | );
446 | dependencies = (
447 | 8D7AC9B61A75495900574AAC /* PBXTargetDependency */,
448 | 8D7AC9B81A75495900574AAC /* PBXTargetDependency */,
449 | );
450 | name = "yavflTests-OSX";
451 | productName = yavflOSXTests;
452 | productReference = 8D7AC9B31A75495900574AAC /* yavflTests-OSX.xctest */;
453 | productType = "com.apple.product-type.bundle.unit-test";
454 | };
455 | 8DEC2B441BFB57D00083EC9D /* yavfl-tvOS */ = {
456 | isa = PBXNativeTarget;
457 | buildConfigurationList = 8DEC2B4C1BFB57D00083EC9D /* Build configuration list for PBXNativeTarget "yavfl-tvOS" */;
458 | buildPhases = (
459 | 8DEC2B401BFB57D00083EC9D /* Sources */,
460 | 8DEC2B411BFB57D00083EC9D /* Frameworks */,
461 | 8DEC2B421BFB57D00083EC9D /* Headers */,
462 | 8DEC2B431BFB57D00083EC9D /* Resources */,
463 | );
464 | buildRules = (
465 | );
466 | dependencies = (
467 | );
468 | name = "yavfl-tvOS";
469 | productName = "yavfl-tvos";
470 | productReference = 8DEC2B451BFB57D00083EC9D /* yavfl.framework */;
471 | productType = "com.apple.product-type.framework";
472 | };
473 | 8DEC2B551BFB594F0083EC9D /* yavflTests-tvOS */ = {
474 | isa = PBXNativeTarget;
475 | buildConfigurationList = 8DEC2B5E1BFB594F0083EC9D /* Build configuration list for PBXNativeTarget "yavflTests-tvOS" */;
476 | buildPhases = (
477 | 8DEC2B521BFB594F0083EC9D /* Sources */,
478 | 8DEC2B531BFB594F0083EC9D /* Frameworks */,
479 | 8DEC2B541BFB594F0083EC9D /* Resources */,
480 | );
481 | buildRules = (
482 | );
483 | dependencies = (
484 | 8DEC2B5D1BFB594F0083EC9D /* PBXTargetDependency */,
485 | );
486 | name = "yavflTests-tvOS";
487 | productName = "yavflTests-tvos";
488 | productReference = 8DEC2B561BFB594F0083EC9D /* yavflTests-tvOS.xctest */;
489 | productType = "com.apple.product-type.bundle.unit-test";
490 | };
491 | 8DF1B0D01A349BC200295741 /* yavflSample-iOS */ = {
492 | isa = PBXNativeTarget;
493 | buildConfigurationList = 8DF1B0F01A349BC200295741 /* Build configuration list for PBXNativeTarget "yavflSample-iOS" */;
494 | buildPhases = (
495 | 8DF1B0CD1A349BC200295741 /* Sources */,
496 | 8DF1B0CE1A349BC200295741 /* Frameworks */,
497 | 8DF1B0CF1A349BC200295741 /* Resources */,
498 | 8D7AC9511A7546A200574AAC /* Embed Frameworks */,
499 | );
500 | buildRules = (
501 | );
502 | dependencies = (
503 | 8D7AC9991A7547BC00574AAC /* PBXTargetDependency */,
504 | );
505 | name = "yavflSample-iOS";
506 | productName = yavfl;
507 | productReference = 8DF1B0D11A349BC200295741 /* yavflSample-iOS.app */;
508 | productType = "com.apple.product-type.application";
509 | };
510 | /* End PBXNativeTarget section */
511 |
512 | /* Begin PBXProject section */
513 | 8DF1B0C91A349BC200295741 /* Project object */ = {
514 | isa = PBXProject;
515 | attributes = {
516 | LastSwiftUpdateCheck = 0710;
517 | LastUpgradeCheck = 0900;
518 | ORGANIZATIONNAME = "Safx Developers";
519 | TargetAttributes = {
520 | 8D556EF11A727791004FA111 = {
521 | CreatedOnToolsVersion = 6.1.1;
522 | };
523 | 8D7AC9821A7547BB00574AAC = {
524 | CreatedOnToolsVersion = 6.1.1;
525 | };
526 | 8D7AC98C1A7547BB00574AAC = {
527 | CreatedOnToolsVersion = 6.1.1;
528 | };
529 | 8D7AC9A81A75495900574AAC = {
530 | CreatedOnToolsVersion = 6.1.1;
531 | };
532 | 8D7AC9B21A75495900574AAC = {
533 | CreatedOnToolsVersion = 6.1.1;
534 | };
535 | 8DEC2B441BFB57D00083EC9D = {
536 | CreatedOnToolsVersion = 7.1.1;
537 | };
538 | 8DEC2B551BFB594F0083EC9D = {
539 | CreatedOnToolsVersion = 7.1.1;
540 | };
541 | 8DF1B0D01A349BC200295741 = {
542 | CreatedOnToolsVersion = 6.1.1;
543 | };
544 | };
545 | };
546 | buildConfigurationList = 8DF1B0CC1A349BC200295741 /* Build configuration list for PBXProject "yavfl" */;
547 | compatibilityVersion = "Xcode 3.2";
548 | developmentRegion = English;
549 | hasScannedForEncodings = 0;
550 | knownRegions = (
551 | en,
552 | Base,
553 | );
554 | mainGroup = 8DF1B0C81A349BC200295741;
555 | productRefGroup = 8DF1B0D21A349BC200295741 /* Products */;
556 | projectDirPath = "";
557 | projectRoot = "";
558 | targets = (
559 | 8D7AC9821A7547BB00574AAC /* yavfl-iOS */,
560 | 8DEC2B441BFB57D00083EC9D /* yavfl-tvOS */,
561 | 8D7AC9A81A75495900574AAC /* yavfl-OSX */,
562 | 8D7AC98C1A7547BB00574AAC /* yavflTests-iOS */,
563 | 8D7AC9B21A75495900574AAC /* yavflTests-OSX */,
564 | 8DEC2B551BFB594F0083EC9D /* yavflTests-tvOS */,
565 | 8DF1B0D01A349BC200295741 /* yavflSample-iOS */,
566 | 8D556EF11A727791004FA111 /* yavflSample-OSX */,
567 | );
568 | };
569 | /* End PBXProject section */
570 |
571 | /* Begin PBXResourcesBuildPhase section */
572 | 8D556EF01A727791004FA111 /* Resources */ = {
573 | isa = PBXResourcesBuildPhase;
574 | buildActionMask = 2147483647;
575 | files = (
576 | 8D556EFB1A727791004FA111 /* Images.xcassets in Resources */,
577 | 8D556EFE1A727791004FA111 /* Main.storyboard in Resources */,
578 | );
579 | runOnlyForDeploymentPostprocessing = 0;
580 | };
581 | 8D7AC9811A7547BB00574AAC /* Resources */ = {
582 | isa = PBXResourcesBuildPhase;
583 | buildActionMask = 2147483647;
584 | files = (
585 | );
586 | runOnlyForDeploymentPostprocessing = 0;
587 | };
588 | 8D7AC98B1A7547BB00574AAC /* Resources */ = {
589 | isa = PBXResourcesBuildPhase;
590 | buildActionMask = 2147483647;
591 | files = (
592 | );
593 | runOnlyForDeploymentPostprocessing = 0;
594 | };
595 | 8D7AC9A71A75495900574AAC /* Resources */ = {
596 | isa = PBXResourcesBuildPhase;
597 | buildActionMask = 2147483647;
598 | files = (
599 | );
600 | runOnlyForDeploymentPostprocessing = 0;
601 | };
602 | 8D7AC9B11A75495900574AAC /* Resources */ = {
603 | isa = PBXResourcesBuildPhase;
604 | buildActionMask = 2147483647;
605 | files = (
606 | );
607 | runOnlyForDeploymentPostprocessing = 0;
608 | };
609 | 8DEC2B431BFB57D00083EC9D /* Resources */ = {
610 | isa = PBXResourcesBuildPhase;
611 | buildActionMask = 2147483647;
612 | files = (
613 | );
614 | runOnlyForDeploymentPostprocessing = 0;
615 | };
616 | 8DEC2B541BFB594F0083EC9D /* Resources */ = {
617 | isa = PBXResourcesBuildPhase;
618 | buildActionMask = 2147483647;
619 | files = (
620 | );
621 | runOnlyForDeploymentPostprocessing = 0;
622 | };
623 | 8DF1B0CF1A349BC200295741 /* Resources */ = {
624 | isa = PBXResourcesBuildPhase;
625 | buildActionMask = 2147483647;
626 | files = (
627 | 8DF1B0DC1A349BC200295741 /* Main.storyboard in Resources */,
628 | 8DF1B0DE1A349BC200295741 /* Images.xcassets in Resources */,
629 | );
630 | runOnlyForDeploymentPostprocessing = 0;
631 | };
632 | /* End PBXResourcesBuildPhase section */
633 |
634 | /* Begin PBXSourcesBuildPhase section */
635 | 8D556EEE1A727791004FA111 /* Sources */ = {
636 | isa = PBXSourcesBuildPhase;
637 | buildActionMask = 2147483647;
638 | files = (
639 | 8DF2D42E1B2AF45C005D77DC /* yavfl.swift in Sources */,
640 | 8D556EF91A727791004FA111 /* ViewController.swift in Sources */,
641 | 8D556EF71A727791004FA111 /* AppDelegate.swift in Sources */,
642 | );
643 | runOnlyForDeploymentPostprocessing = 0;
644 | };
645 | 8D7AC97E1A7547BB00574AAC /* Sources */ = {
646 | isa = PBXSourcesBuildPhase;
647 | buildActionMask = 2147483647;
648 | files = (
649 | 8D7AC9A21A7547C300574AAC /* yavfl.swift in Sources */,
650 | );
651 | runOnlyForDeploymentPostprocessing = 0;
652 | };
653 | 8D7AC9891A7547BB00574AAC /* Sources */ = {
654 | isa = PBXSourcesBuildPhase;
655 | buildActionMask = 2147483647;
656 | files = (
657 | 8D7AC9971A7547BC00574AAC /* yavflTests.swift in Sources */,
658 | );
659 | runOnlyForDeploymentPostprocessing = 0;
660 | };
661 | 8D7AC9A41A75495900574AAC /* Sources */ = {
662 | isa = PBXSourcesBuildPhase;
663 | buildActionMask = 2147483647;
664 | files = (
665 | 8D7AC9C81A75496F00574AAC /* yavfl.swift in Sources */,
666 | );
667 | runOnlyForDeploymentPostprocessing = 0;
668 | };
669 | 8D7AC9AF1A75495900574AAC /* Sources */ = {
670 | isa = PBXSourcesBuildPhase;
671 | buildActionMask = 2147483647;
672 | files = (
673 | 8D7AC9BD1A75495900574AAC /* yavflOSXTests.swift in Sources */,
674 | );
675 | runOnlyForDeploymentPostprocessing = 0;
676 | };
677 | 8DEC2B401BFB57D00083EC9D /* Sources */ = {
678 | isa = PBXSourcesBuildPhase;
679 | buildActionMask = 2147483647;
680 | files = (
681 | 8DEC2B511BFB58E40083EC9D /* yavfl.swift in Sources */,
682 | );
683 | runOnlyForDeploymentPostprocessing = 0;
684 | };
685 | 8DEC2B521BFB594F0083EC9D /* Sources */ = {
686 | isa = PBXSourcesBuildPhase;
687 | buildActionMask = 2147483647;
688 | files = (
689 | 8DEC2B591BFB594F0083EC9D /* yavflTests_tvos.swift in Sources */,
690 | );
691 | runOnlyForDeploymentPostprocessing = 0;
692 | };
693 | 8DF1B0CD1A349BC200295741 /* Sources */ = {
694 | isa = PBXSourcesBuildPhase;
695 | buildActionMask = 2147483647;
696 | files = (
697 | 8DF2D42D1B2AF45B005D77DC /* yavfl.swift in Sources */,
698 | 8DF1B0D91A349BC200295741 /* ViewController.swift in Sources */,
699 | 8DF1B0D71A349BC200295741 /* AppDelegate.swift in Sources */,
700 | );
701 | runOnlyForDeploymentPostprocessing = 0;
702 | };
703 | /* End PBXSourcesBuildPhase section */
704 |
705 | /* Begin PBXTargetDependency section */
706 | 8D7AC9901A7547BB00574AAC /* PBXTargetDependency */ = {
707 | isa = PBXTargetDependency;
708 | target = 8D7AC9821A7547BB00574AAC /* yavfl-iOS */;
709 | targetProxy = 8D7AC98F1A7547BB00574AAC /* PBXContainerItemProxy */;
710 | };
711 | 8D7AC9921A7547BB00574AAC /* PBXTargetDependency */ = {
712 | isa = PBXTargetDependency;
713 | target = 8DF1B0D01A349BC200295741 /* yavflSample-iOS */;
714 | targetProxy = 8D7AC9911A7547BB00574AAC /* PBXContainerItemProxy */;
715 | };
716 | 8D7AC9991A7547BC00574AAC /* PBXTargetDependency */ = {
717 | isa = PBXTargetDependency;
718 | target = 8D7AC9821A7547BB00574AAC /* yavfl-iOS */;
719 | targetProxy = 8D7AC9981A7547BC00574AAC /* PBXContainerItemProxy */;
720 | };
721 | 8D7AC9B61A75495900574AAC /* PBXTargetDependency */ = {
722 | isa = PBXTargetDependency;
723 | target = 8D7AC9A81A75495900574AAC /* yavfl-OSX */;
724 | targetProxy = 8D7AC9B51A75495900574AAC /* PBXContainerItemProxy */;
725 | };
726 | 8D7AC9B81A75495900574AAC /* PBXTargetDependency */ = {
727 | isa = PBXTargetDependency;
728 | target = 8D556EF11A727791004FA111 /* yavflSample-OSX */;
729 | targetProxy = 8D7AC9B71A75495900574AAC /* PBXContainerItemProxy */;
730 | };
731 | 8D7AC9BF1A75495900574AAC /* PBXTargetDependency */ = {
732 | isa = PBXTargetDependency;
733 | target = 8D7AC9A81A75495900574AAC /* yavfl-OSX */;
734 | targetProxy = 8D7AC9BE1A75495900574AAC /* PBXContainerItemProxy */;
735 | };
736 | 8DEC2B5D1BFB594F0083EC9D /* PBXTargetDependency */ = {
737 | isa = PBXTargetDependency;
738 | target = 8DEC2B441BFB57D00083EC9D /* yavfl-tvOS */;
739 | targetProxy = 8DEC2B5C1BFB594F0083EC9D /* PBXContainerItemProxy */;
740 | };
741 | /* End PBXTargetDependency section */
742 |
743 | /* Begin PBXVariantGroup section */
744 | 8D556EFC1A727791004FA111 /* Main.storyboard */ = {
745 | isa = PBXVariantGroup;
746 | children = (
747 | 8D556EFD1A727791004FA111 /* Base */,
748 | );
749 | name = Main.storyboard;
750 | sourceTree = "";
751 | };
752 | 8DF1B0DA1A349BC200295741 /* Main.storyboard */ = {
753 | isa = PBXVariantGroup;
754 | children = (
755 | 8DF1B0DB1A349BC200295741 /* Base */,
756 | );
757 | name = Main.storyboard;
758 | sourceTree = "";
759 | };
760 | /* End PBXVariantGroup section */
761 |
762 | /* Begin XCBuildConfiguration section */
763 | 8D556F0B1A727791004FA111 /* Debug */ = {
764 | isa = XCBuildConfiguration;
765 | buildSettings = {
766 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
767 | CODE_SIGN_IDENTITY = "-";
768 | COMBINE_HIDPI_IMAGES = YES;
769 | GCC_PREPROCESSOR_DEFINITIONS = (
770 | "DEBUG=1",
771 | "$(inherited)",
772 | );
773 | INFOPLIST_FILE = "$(SRCROOT)/Sample/yavflSample-OSX/Info.plist";
774 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
775 | MACOSX_DEPLOYMENT_TARGET = 10.10;
776 | PRODUCT_BUNDLE_IDENTIFIER = "com.blogspot.safx-dev.$(PRODUCT_NAME:rfc1034identifier)";
777 | PRODUCT_NAME = "$(TARGET_NAME)";
778 | SDKROOT = macosx;
779 | SWIFT_VERSION = 4.0;
780 | };
781 | name = Debug;
782 | };
783 | 8D556F0C1A727791004FA111 /* Release */ = {
784 | isa = XCBuildConfiguration;
785 | buildSettings = {
786 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
787 | CODE_SIGN_IDENTITY = "-";
788 | COMBINE_HIDPI_IMAGES = YES;
789 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
790 | INFOPLIST_FILE = "$(SRCROOT)/Sample/yavflSample-OSX/Info.plist";
791 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
792 | MACOSX_DEPLOYMENT_TARGET = 10.10;
793 | PRODUCT_BUNDLE_IDENTIFIER = "com.blogspot.safx-dev.$(PRODUCT_NAME:rfc1034identifier)";
794 | PRODUCT_NAME = "$(TARGET_NAME)";
795 | SDKROOT = macosx;
796 | SWIFT_VERSION = 4.0;
797 | };
798 | name = Release;
799 | };
800 | 8D7AC99D1A7547BC00574AAC /* Debug */ = {
801 | isa = XCBuildConfiguration;
802 | buildSettings = {
803 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
804 | CURRENT_PROJECT_VERSION = 1;
805 | DEFINES_MODULE = YES;
806 | DYLIB_COMPATIBILITY_VERSION = 1;
807 | DYLIB_CURRENT_VERSION = 1;
808 | DYLIB_INSTALL_NAME_BASE = "@rpath";
809 | GCC_PREPROCESSOR_DEFINITIONS = (
810 | "DEBUG=1",
811 | "$(inherited)",
812 | );
813 | INFOPLIST_FILE = "$(SRCROOT)/Info.plist";
814 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
815 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
816 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
817 | PRODUCT_BUNDLE_IDENTIFIER = "com.blogspot.safx-dev.$(PRODUCT_NAME:rfc1034identifier)";
818 | PRODUCT_NAME = yavfl;
819 | SKIP_INSTALL = YES;
820 | SWIFT_VERSION = 4.0;
821 | VERSIONING_SYSTEM = "apple-generic";
822 | VERSION_INFO_PREFIX = "";
823 | };
824 | name = Debug;
825 | };
826 | 8D7AC99E1A7547BC00574AAC /* Release */ = {
827 | isa = XCBuildConfiguration;
828 | buildSettings = {
829 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
830 | CURRENT_PROJECT_VERSION = 1;
831 | DEFINES_MODULE = YES;
832 | DYLIB_COMPATIBILITY_VERSION = 1;
833 | DYLIB_CURRENT_VERSION = 1;
834 | DYLIB_INSTALL_NAME_BASE = "@rpath";
835 | INFOPLIST_FILE = "$(SRCROOT)/Info.plist";
836 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
837 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
838 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
839 | PRODUCT_BUNDLE_IDENTIFIER = "com.blogspot.safx-dev.$(PRODUCT_NAME:rfc1034identifier)";
840 | PRODUCT_NAME = yavfl;
841 | SKIP_INSTALL = YES;
842 | SWIFT_VERSION = 4.0;
843 | VERSIONING_SYSTEM = "apple-generic";
844 | VERSION_INFO_PREFIX = "";
845 | };
846 | name = Release;
847 | };
848 | 8D7AC9A01A7547BC00574AAC /* Debug */ = {
849 | isa = XCBuildConfiguration;
850 | buildSettings = {
851 | FRAMEWORK_SEARCH_PATHS = "$(inherited)";
852 | GCC_PREPROCESSOR_DEFINITIONS = (
853 | "DEBUG=1",
854 | "$(inherited)",
855 | );
856 | INFOPLIST_FILE = Tests/yavflTests/Info.plist;
857 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
858 | PRODUCT_BUNDLE_IDENTIFIER = "com.blogspot.safx-dev.$(PRODUCT_NAME:rfc1034identifier)";
859 | PRODUCT_NAME = "$(TARGET_NAME)";
860 | SWIFT_VERSION = 4.0;
861 | };
862 | name = Debug;
863 | };
864 | 8D7AC9A11A7547BC00574AAC /* Release */ = {
865 | isa = XCBuildConfiguration;
866 | buildSettings = {
867 | FRAMEWORK_SEARCH_PATHS = "$(inherited)";
868 | INFOPLIST_FILE = Tests/yavflTests/Info.plist;
869 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
870 | PRODUCT_BUNDLE_IDENTIFIER = "com.blogspot.safx-dev.$(PRODUCT_NAME:rfc1034identifier)";
871 | PRODUCT_NAME = "$(TARGET_NAME)";
872 | SWIFT_VERSION = 4.0;
873 | };
874 | name = Release;
875 | };
876 | 8D7AC9C31A75495900574AAC /* Debug */ = {
877 | isa = XCBuildConfiguration;
878 | buildSettings = {
879 | CODE_SIGN_IDENTITY = "-";
880 | COMBINE_HIDPI_IMAGES = YES;
881 | CURRENT_PROJECT_VERSION = 1;
882 | DEFINES_MODULE = YES;
883 | DYLIB_COMPATIBILITY_VERSION = 1;
884 | DYLIB_CURRENT_VERSION = 1;
885 | DYLIB_INSTALL_NAME_BASE = "@rpath";
886 | FRAMEWORK_VERSION = A;
887 | GCC_PREPROCESSOR_DEFINITIONS = (
888 | "DEBUG=1",
889 | "$(inherited)",
890 | );
891 | INFOPLIST_FILE = "$(SRCROOT)/Info.plist";
892 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
893 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
894 | MACOSX_DEPLOYMENT_TARGET = 10.10;
895 | PRODUCT_BUNDLE_IDENTIFIER = "com.blogspot.safx-dev.$(PRODUCT_NAME:rfc1034identifier)";
896 | PRODUCT_NAME = yavfl;
897 | SDKROOT = macosx;
898 | SKIP_INSTALL = YES;
899 | SWIFT_VERSION = 4.0;
900 | VERSIONING_SYSTEM = "apple-generic";
901 | VERSION_INFO_PREFIX = "";
902 | };
903 | name = Debug;
904 | };
905 | 8D7AC9C41A75495900574AAC /* Release */ = {
906 | isa = XCBuildConfiguration;
907 | buildSettings = {
908 | CODE_SIGN_IDENTITY = "-";
909 | COMBINE_HIDPI_IMAGES = YES;
910 | CURRENT_PROJECT_VERSION = 1;
911 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
912 | DEFINES_MODULE = YES;
913 | DYLIB_COMPATIBILITY_VERSION = 1;
914 | DYLIB_CURRENT_VERSION = 1;
915 | DYLIB_INSTALL_NAME_BASE = "@rpath";
916 | FRAMEWORK_VERSION = A;
917 | INFOPLIST_FILE = "$(SRCROOT)/Info.plist";
918 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
919 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
920 | MACOSX_DEPLOYMENT_TARGET = 10.10;
921 | PRODUCT_BUNDLE_IDENTIFIER = "com.blogspot.safx-dev.$(PRODUCT_NAME:rfc1034identifier)";
922 | PRODUCT_NAME = yavfl;
923 | SDKROOT = macosx;
924 | SKIP_INSTALL = YES;
925 | SWIFT_VERSION = 4.0;
926 | VERSIONING_SYSTEM = "apple-generic";
927 | VERSION_INFO_PREFIX = "";
928 | };
929 | name = Release;
930 | };
931 | 8D7AC9C61A75495900574AAC /* Debug */ = {
932 | isa = XCBuildConfiguration;
933 | buildSettings = {
934 | COMBINE_HIDPI_IMAGES = YES;
935 | FRAMEWORK_SEARCH_PATHS = "$(inherited)";
936 | GCC_PREPROCESSOR_DEFINITIONS = (
937 | "DEBUG=1",
938 | "$(inherited)",
939 | );
940 | INFOPLIST_FILE = Tests/yavflOSXTests/Info.plist;
941 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
942 | MACOSX_DEPLOYMENT_TARGET = 10.10;
943 | PRODUCT_BUNDLE_IDENTIFIER = "com.blogspot.safx-dev.$(PRODUCT_NAME:rfc1034identifier)";
944 | PRODUCT_NAME = "$(TARGET_NAME)";
945 | SDKROOT = macosx;
946 | SWIFT_VERSION = 4.0;
947 | };
948 | name = Debug;
949 | };
950 | 8D7AC9C71A75495900574AAC /* Release */ = {
951 | isa = XCBuildConfiguration;
952 | buildSettings = {
953 | COMBINE_HIDPI_IMAGES = YES;
954 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
955 | FRAMEWORK_SEARCH_PATHS = "$(inherited)";
956 | INFOPLIST_FILE = Tests/yavflOSXTests/Info.plist;
957 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
958 | MACOSX_DEPLOYMENT_TARGET = 10.10;
959 | PRODUCT_BUNDLE_IDENTIFIER = "com.blogspot.safx-dev.$(PRODUCT_NAME:rfc1034identifier)";
960 | PRODUCT_NAME = "$(TARGET_NAME)";
961 | SDKROOT = macosx;
962 | SWIFT_VERSION = 4.0;
963 | };
964 | name = Release;
965 | };
966 | 8DEC2B4A1BFB57D00083EC9D /* Debug */ = {
967 | isa = XCBuildConfiguration;
968 | buildSettings = {
969 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
970 | CURRENT_PROJECT_VERSION = 1;
971 | DEBUG_INFORMATION_FORMAT = dwarf;
972 | DEFINES_MODULE = YES;
973 | DYLIB_COMPATIBILITY_VERSION = 1;
974 | DYLIB_CURRENT_VERSION = 1;
975 | DYLIB_INSTALL_NAME_BASE = "@rpath";
976 | GCC_NO_COMMON_BLOCKS = YES;
977 | INFOPLIST_FILE = Info.plist;
978 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
979 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
980 | PRODUCT_BUNDLE_IDENTIFIER = "com.blogspot.safx-dev.yavfl-tvos";
981 | PRODUCT_NAME = yavfl;
982 | SDKROOT = appletvos;
983 | SKIP_INSTALL = YES;
984 | SWIFT_VERSION = 4.0;
985 | TARGETED_DEVICE_FAMILY = 3;
986 | TVOS_DEPLOYMENT_TARGET = 9.0;
987 | VERSIONING_SYSTEM = "apple-generic";
988 | VERSION_INFO_PREFIX = "";
989 | };
990 | name = Debug;
991 | };
992 | 8DEC2B4B1BFB57D00083EC9D /* Release */ = {
993 | isa = XCBuildConfiguration;
994 | buildSettings = {
995 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
996 | COPY_PHASE_STRIP = NO;
997 | CURRENT_PROJECT_VERSION = 1;
998 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
999 | DEFINES_MODULE = YES;
1000 | DYLIB_COMPATIBILITY_VERSION = 1;
1001 | DYLIB_CURRENT_VERSION = 1;
1002 | DYLIB_INSTALL_NAME_BASE = "@rpath";
1003 | GCC_NO_COMMON_BLOCKS = YES;
1004 | INFOPLIST_FILE = Info.plist;
1005 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1006 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1007 | PRODUCT_BUNDLE_IDENTIFIER = "com.blogspot.safx-dev.yavfl-tvos";
1008 | PRODUCT_NAME = yavfl;
1009 | SDKROOT = appletvos;
1010 | SKIP_INSTALL = YES;
1011 | SWIFT_VERSION = 4.0;
1012 | TARGETED_DEVICE_FAMILY = 3;
1013 | TVOS_DEPLOYMENT_TARGET = 9.0;
1014 | VERSIONING_SYSTEM = "apple-generic";
1015 | VERSION_INFO_PREFIX = "";
1016 | };
1017 | name = Release;
1018 | };
1019 | 8DEC2B5F1BFB594F0083EC9D /* Debug */ = {
1020 | isa = XCBuildConfiguration;
1021 | buildSettings = {
1022 | DEBUG_INFORMATION_FORMAT = dwarf;
1023 | GCC_NO_COMMON_BLOCKS = YES;
1024 | INFOPLIST_FILE = "Tests/yavflTests-tvos/Info.plist";
1025 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1026 | PRODUCT_BUNDLE_IDENTIFIER = "com.blogspot.safx-dev.yavflTests-tvos";
1027 | PRODUCT_NAME = "$(TARGET_NAME)";
1028 | SDKROOT = appletvos;
1029 | SWIFT_VERSION = 4.0;
1030 | TVOS_DEPLOYMENT_TARGET = 9.0;
1031 | };
1032 | name = Debug;
1033 | };
1034 | 8DEC2B601BFB594F0083EC9D /* Release */ = {
1035 | isa = XCBuildConfiguration;
1036 | buildSettings = {
1037 | COPY_PHASE_STRIP = NO;
1038 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
1039 | GCC_NO_COMMON_BLOCKS = YES;
1040 | INFOPLIST_FILE = "Tests/yavflTests-tvos/Info.plist";
1041 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
1042 | PRODUCT_BUNDLE_IDENTIFIER = "com.blogspot.safx-dev.yavflTests-tvos";
1043 | PRODUCT_NAME = "$(TARGET_NAME)";
1044 | SDKROOT = appletvos;
1045 | SWIFT_VERSION = 4.0;
1046 | TVOS_DEPLOYMENT_TARGET = 9.0;
1047 | };
1048 | name = Release;
1049 | };
1050 | 8DF1B0EE1A349BC200295741 /* Debug */ = {
1051 | isa = XCBuildConfiguration;
1052 | buildSettings = {
1053 | ALWAYS_SEARCH_USER_PATHS = NO;
1054 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
1055 | CLANG_CXX_LIBRARY = "libc++";
1056 | CLANG_ENABLE_MODULES = YES;
1057 | CLANG_ENABLE_OBJC_ARC = YES;
1058 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
1059 | CLANG_WARN_BOOL_CONVERSION = YES;
1060 | CLANG_WARN_COMMA = YES;
1061 | CLANG_WARN_CONSTANT_CONVERSION = YES;
1062 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
1063 | CLANG_WARN_EMPTY_BODY = YES;
1064 | CLANG_WARN_ENUM_CONVERSION = YES;
1065 | CLANG_WARN_INFINITE_RECURSION = YES;
1066 | CLANG_WARN_INT_CONVERSION = YES;
1067 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
1068 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
1069 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
1070 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
1071 | CLANG_WARN_STRICT_PROTOTYPES = YES;
1072 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
1073 | CLANG_WARN_UNREACHABLE_CODE = YES;
1074 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
1075 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1076 | COPY_PHASE_STRIP = NO;
1077 | ENABLE_STRICT_OBJC_MSGSEND = YES;
1078 | ENABLE_TESTABILITY = YES;
1079 | GCC_C_LANGUAGE_STANDARD = gnu99;
1080 | GCC_DYNAMIC_NO_PIC = NO;
1081 | GCC_GENERATE_TEST_COVERAGE_FILES = YES;
1082 | GCC_NO_COMMON_BLOCKS = YES;
1083 | GCC_OPTIMIZATION_LEVEL = 0;
1084 | GCC_PREPROCESSOR_DEFINITIONS = (
1085 | "DEBUG=1",
1086 | "$(inherited)",
1087 | );
1088 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
1089 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
1090 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
1091 | GCC_WARN_UNDECLARED_SELECTOR = YES;
1092 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
1093 | GCC_WARN_UNUSED_FUNCTION = YES;
1094 | GCC_WARN_UNUSED_VARIABLE = YES;
1095 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
1096 | MACOSX_DEPLOYMENT_TARGET = 10.10;
1097 | MTL_ENABLE_DEBUG_INFO = YES;
1098 | ONLY_ACTIVE_ARCH = YES;
1099 | SDKROOT = iphoneos;
1100 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
1101 | TARGETED_DEVICE_FAMILY = "1,2";
1102 | };
1103 | name = Debug;
1104 | };
1105 | 8DF1B0EF1A349BC200295741 /* Release */ = {
1106 | isa = XCBuildConfiguration;
1107 | buildSettings = {
1108 | ALWAYS_SEARCH_USER_PATHS = NO;
1109 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
1110 | CLANG_CXX_LIBRARY = "libc++";
1111 | CLANG_ENABLE_MODULES = YES;
1112 | CLANG_ENABLE_OBJC_ARC = YES;
1113 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
1114 | CLANG_WARN_BOOL_CONVERSION = YES;
1115 | CLANG_WARN_COMMA = YES;
1116 | CLANG_WARN_CONSTANT_CONVERSION = YES;
1117 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
1118 | CLANG_WARN_EMPTY_BODY = YES;
1119 | CLANG_WARN_ENUM_CONVERSION = YES;
1120 | CLANG_WARN_INFINITE_RECURSION = YES;
1121 | CLANG_WARN_INT_CONVERSION = YES;
1122 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
1123 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
1124 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
1125 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
1126 | CLANG_WARN_STRICT_PROTOTYPES = YES;
1127 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
1128 | CLANG_WARN_UNREACHABLE_CODE = YES;
1129 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
1130 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
1131 | COPY_PHASE_STRIP = YES;
1132 | ENABLE_NS_ASSERTIONS = NO;
1133 | ENABLE_STRICT_OBJC_MSGSEND = YES;
1134 | GCC_C_LANGUAGE_STANDARD = gnu99;
1135 | GCC_GENERATE_TEST_COVERAGE_FILES = NO;
1136 | GCC_NO_COMMON_BLOCKS = YES;
1137 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
1138 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
1139 | GCC_WARN_UNDECLARED_SELECTOR = YES;
1140 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
1141 | GCC_WARN_UNUSED_FUNCTION = YES;
1142 | GCC_WARN_UNUSED_VARIABLE = YES;
1143 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
1144 | MACOSX_DEPLOYMENT_TARGET = 10.10;
1145 | MTL_ENABLE_DEBUG_INFO = NO;
1146 | SDKROOT = iphoneos;
1147 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
1148 | TARGETED_DEVICE_FAMILY = "1,2";
1149 | VALIDATE_PRODUCT = YES;
1150 | };
1151 | name = Release;
1152 | };
1153 | 8DF1B0F11A349BC200295741 /* Debug */ = {
1154 | isa = XCBuildConfiguration;
1155 | buildSettings = {
1156 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
1157 | INFOPLIST_FILE = "$(SRCROOT)/Sample/yavflSample-iOS/Info.plist";
1158 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
1159 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
1160 | PRODUCT_BUNDLE_IDENTIFIER = "com.blogspot.safx-dev.$(PRODUCT_NAME:rfc1034identifier)";
1161 | PRODUCT_NAME = "$(TARGET_NAME)";
1162 | SWIFT_VERSION = 4.0;
1163 | };
1164 | name = Debug;
1165 | };
1166 | 8DF1B0F21A349BC200295741 /* Release */ = {
1167 | isa = XCBuildConfiguration;
1168 | buildSettings = {
1169 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
1170 | INFOPLIST_FILE = "$(SRCROOT)/Sample/yavflSample-iOS/Info.plist";
1171 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
1172 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
1173 | PRODUCT_BUNDLE_IDENTIFIER = "com.blogspot.safx-dev.$(PRODUCT_NAME:rfc1034identifier)";
1174 | PRODUCT_NAME = "$(TARGET_NAME)";
1175 | SWIFT_VERSION = 4.0;
1176 | };
1177 | name = Release;
1178 | };
1179 | /* End XCBuildConfiguration section */
1180 |
1181 | /* Begin XCConfigurationList section */
1182 | 8D556F0F1A727791004FA111 /* Build configuration list for PBXNativeTarget "yavflSample-OSX" */ = {
1183 | isa = XCConfigurationList;
1184 | buildConfigurations = (
1185 | 8D556F0B1A727791004FA111 /* Debug */,
1186 | 8D556F0C1A727791004FA111 /* Release */,
1187 | );
1188 | defaultConfigurationIsVisible = 0;
1189 | defaultConfigurationName = Release;
1190 | };
1191 | 8D7AC99C1A7547BC00574AAC /* Build configuration list for PBXNativeTarget "yavfl-iOS" */ = {
1192 | isa = XCConfigurationList;
1193 | buildConfigurations = (
1194 | 8D7AC99D1A7547BC00574AAC /* Debug */,
1195 | 8D7AC99E1A7547BC00574AAC /* Release */,
1196 | );
1197 | defaultConfigurationIsVisible = 0;
1198 | defaultConfigurationName = Release;
1199 | };
1200 | 8D7AC99F1A7547BC00574AAC /* Build configuration list for PBXNativeTarget "yavflTests-iOS" */ = {
1201 | isa = XCConfigurationList;
1202 | buildConfigurations = (
1203 | 8D7AC9A01A7547BC00574AAC /* Debug */,
1204 | 8D7AC9A11A7547BC00574AAC /* Release */,
1205 | );
1206 | defaultConfigurationIsVisible = 0;
1207 | defaultConfigurationName = Release;
1208 | };
1209 | 8D7AC9C21A75495900574AAC /* Build configuration list for PBXNativeTarget "yavfl-OSX" */ = {
1210 | isa = XCConfigurationList;
1211 | buildConfigurations = (
1212 | 8D7AC9C31A75495900574AAC /* Debug */,
1213 | 8D7AC9C41A75495900574AAC /* Release */,
1214 | );
1215 | defaultConfigurationIsVisible = 0;
1216 | defaultConfigurationName = Release;
1217 | };
1218 | 8D7AC9C51A75495900574AAC /* Build configuration list for PBXNativeTarget "yavflTests-OSX" */ = {
1219 | isa = XCConfigurationList;
1220 | buildConfigurations = (
1221 | 8D7AC9C61A75495900574AAC /* Debug */,
1222 | 8D7AC9C71A75495900574AAC /* Release */,
1223 | );
1224 | defaultConfigurationIsVisible = 0;
1225 | defaultConfigurationName = Release;
1226 | };
1227 | 8DEC2B4C1BFB57D00083EC9D /* Build configuration list for PBXNativeTarget "yavfl-tvOS" */ = {
1228 | isa = XCConfigurationList;
1229 | buildConfigurations = (
1230 | 8DEC2B4A1BFB57D00083EC9D /* Debug */,
1231 | 8DEC2B4B1BFB57D00083EC9D /* Release */,
1232 | );
1233 | defaultConfigurationIsVisible = 0;
1234 | defaultConfigurationName = Release;
1235 | };
1236 | 8DEC2B5E1BFB594F0083EC9D /* Build configuration list for PBXNativeTarget "yavflTests-tvOS" */ = {
1237 | isa = XCConfigurationList;
1238 | buildConfigurations = (
1239 | 8DEC2B5F1BFB594F0083EC9D /* Debug */,
1240 | 8DEC2B601BFB594F0083EC9D /* Release */,
1241 | );
1242 | defaultConfigurationIsVisible = 0;
1243 | defaultConfigurationName = Release;
1244 | };
1245 | 8DF1B0CC1A349BC200295741 /* Build configuration list for PBXProject "yavfl" */ = {
1246 | isa = XCConfigurationList;
1247 | buildConfigurations = (
1248 | 8DF1B0EE1A349BC200295741 /* Debug */,
1249 | 8DF1B0EF1A349BC200295741 /* Release */,
1250 | );
1251 | defaultConfigurationIsVisible = 0;
1252 | defaultConfigurationName = Release;
1253 | };
1254 | 8DF1B0F01A349BC200295741 /* Build configuration list for PBXNativeTarget "yavflSample-iOS" */ = {
1255 | isa = XCConfigurationList;
1256 | buildConfigurations = (
1257 | 8DF1B0F11A349BC200295741 /* Debug */,
1258 | 8DF1B0F21A349BC200295741 /* Release */,
1259 | );
1260 | defaultConfigurationIsVisible = 0;
1261 | defaultConfigurationName = Release;
1262 | };
1263 | /* End XCConfigurationList section */
1264 | };
1265 | rootObject = 8DF1B0C91A349BC200295741 /* Project object */;
1266 | }
1267 |
--------------------------------------------------------------------------------
/yavfl.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/yavfl.xcodeproj/xcshareddata/xcschemes/yavfl-OSX.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
46 |
47 |
49 |
55 |
56 |
57 |
58 |
59 |
65 |
66 |
67 |
68 |
69 |
70 |
81 |
82 |
88 |
89 |
90 |
91 |
92 |
93 |
99 |
100 |
106 |
107 |
108 |
109 |
111 |
112 |
116 |
117 |
118 |
--------------------------------------------------------------------------------
/yavfl.xcodeproj/xcshareddata/xcschemes/yavfl-iOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
46 |
47 |
49 |
55 |
56 |
57 |
58 |
59 |
65 |
66 |
67 |
68 |
69 |
70 |
81 |
82 |
88 |
89 |
90 |
91 |
92 |
93 |
99 |
100 |
106 |
107 |
108 |
109 |
111 |
112 |
115 |
116 |
117 |
--------------------------------------------------------------------------------
/yavfl.xcodeproj/xcshareddata/xcschemes/yavfl-tvOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
46 |
47 |
49 |
55 |
56 |
57 |
58 |
59 |
65 |
66 |
67 |
68 |
69 |
70 |
81 |
82 |
88 |
89 |
90 |
91 |
92 |
93 |
99 |
100 |
106 |
107 |
108 |
109 |
111 |
112 |
115 |
116 |
117 |
--------------------------------------------------------------------------------