├── .gitignore ├── Cartfile ├── Cartfile.resolved ├── Assets └── Icon │ ├── Icon.png │ └── Icon.pxm ├── TodayFlights ├── Assets.xcassets │ ├── Contents.json │ └── AppIcon.appiconset │ │ ├── Icon_128pt.png │ │ ├── Icon_16pt.png │ │ ├── Icon_256pt.png │ │ ├── Icon_32pt.png │ │ ├── Icon_512pt.png │ │ ├── Icon_16pt@2x.png │ │ ├── Icon_32pt@2x.png │ │ ├── Icon_128pt@2x.png │ │ ├── Icon_256pt@2x.png │ │ ├── Icon_512pt@2x.png │ │ └── Contents.json ├── PrivateHeaders │ └── FlightUtilities │ │ └── FUFlightViewController.h ├── UserDefaults+AppGroup.swift ├── AppDelegate.swift ├── TodayFlights.entitlements ├── Info.plist ├── DemoWindowController.swift ├── AddFlightViewController.swift ├── dsa_pub.pem └── Base.lproj │ └── MainMenu.xib ├── TodayFlightsWidget ├── en.lproj │ └── InfoPlist.strings ├── FirstRunViewController.h ├── TodayViewController.h ├── FirstRunViewController.m ├── EditFlightViewController.h ├── TodayFlightsWidget.entitlements ├── Base.lproj │ └── TodayViewController.xib ├── Info.plist ├── EditFlightViewController.m ├── FirstRunViewController.xib ├── TodayViewController.m └── EditFlightViewController.xib ├── TodayFlightsTests ├── Info.plist └── TodayFlightsTests.m ├── README.md └── TodayFlights.xcodeproj └── project.pbxproj /.gitignore: -------------------------------------------------------------------------------- 1 | Carthage/ -------------------------------------------------------------------------------- /Cartfile: -------------------------------------------------------------------------------- 1 | github "sparkle-project/Sparkle" 2 | -------------------------------------------------------------------------------- /Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "sparkle-project/Sparkle" "v1.23.0" 2 | -------------------------------------------------------------------------------- /Assets/Icon/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josh-/TodayFlights/HEAD/Assets/Icon/Icon.png -------------------------------------------------------------------------------- /Assets/Icon/Icon.pxm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josh-/TodayFlights/HEAD/Assets/Icon/Icon.pxm -------------------------------------------------------------------------------- /TodayFlights/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_128pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josh-/TodayFlights/HEAD/TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_128pt.png -------------------------------------------------------------------------------- /TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_16pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josh-/TodayFlights/HEAD/TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_16pt.png -------------------------------------------------------------------------------- /TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_256pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josh-/TodayFlights/HEAD/TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_256pt.png -------------------------------------------------------------------------------- /TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_32pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josh-/TodayFlights/HEAD/TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_32pt.png -------------------------------------------------------------------------------- /TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_512pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josh-/TodayFlights/HEAD/TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_512pt.png -------------------------------------------------------------------------------- /TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_16pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josh-/TodayFlights/HEAD/TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_16pt@2x.png -------------------------------------------------------------------------------- /TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_32pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josh-/TodayFlights/HEAD/TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_32pt@2x.png -------------------------------------------------------------------------------- /TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_128pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josh-/TodayFlights/HEAD/TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_128pt@2x.png -------------------------------------------------------------------------------- /TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_256pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josh-/TodayFlights/HEAD/TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_256pt@2x.png -------------------------------------------------------------------------------- /TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_512pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/josh-/TodayFlights/HEAD/TodayFlights/Assets.xcassets/AppIcon.appiconset/Icon_512pt@2x.png -------------------------------------------------------------------------------- /TodayFlightsWidget/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Display name and description for this extension. */ 2 | "CFBundleDisplayName" = "TodayFlights"; 3 | "com.apple.notificationcenter.widget.description" = "Track flights in Notification Center"; 4 | 5 | -------------------------------------------------------------------------------- /TodayFlightsWidget/FirstRunViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FirstRunViewController.h 3 | // TodayFlights 4 | // 5 | // Created by Josh Parnham on 30/12/16. 6 | // Copyright © 2016 Josh Parnham. All rights reserved. 7 | // 8 | 9 | @import AppKit; 10 | 11 | @interface FirstRunViewController : NSViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /TodayFlightsWidget/TodayViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // TodayViewController.h 3 | // TodayFlightsWidget 4 | // 5 | // Created by Josh Parnham on 27/8/20. 6 | // Copyright © 2020 Josh Parnham. All rights reserved. 7 | // 8 | 9 | @import AppKit; 10 | 11 | @interface TodayViewController : NSViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /TodayFlights/PrivateHeaders/FlightUtilities/FUFlightViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated by class-dump 3.5 (64 bit). 3 | // 4 | // Copyright (C) 1997-2019 Steve Nygard. 5 | // 6 | 7 | #import 8 | 9 | @interface FUFlightViewController : NSViewController 10 | { 11 | } 12 | 13 | - (id)initWithFlightCode:(unsigned long long)arg1 airlineCode:(id)arg2; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /TodayFlightsWidget/FirstRunViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // FirstRunViewController.m 3 | // TodayFlights 4 | // 5 | // Created by Josh Parnham on 30/12/16. 6 | // Copyright © 2016 Josh Parnham. All rights reserved. 7 | // 8 | 9 | #import "FirstRunViewController.h" 10 | 11 | @implementation FirstRunViewController 12 | 13 | - (void)viewDidLoad { 14 | [super viewDidLoad]; 15 | 16 | self.preferredContentSize = self.view.frame.size; 17 | } 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /TodayFlightsWidget/EditFlightViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EditFlightViewController.h 3 | // TodayFlightsWidget 4 | // 5 | // Created by Josh Parnham on 29/8/20. 6 | // Copyright © 2020 Josh Parnham. All rights reserved. 7 | // 8 | 9 | @import AppKit; 10 | 11 | @interface EditFlightViewController : NSViewController 12 | 13 | @property (strong, nonatomic) IBOutlet NSTextField *airlineCodeTextField; 14 | @property (strong, nonatomic) IBOutlet NSTextField *routeNumberTextField; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /TodayFlightsWidget/TodayFlightsWidget.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.application-groups 8 | 9 | group.com.joshparnham.TodayFlights 10 | 11 | com.apple.security.network.client 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /TodayFlights/UserDefaults+AppGroup.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserDefaults+AppGroup.swift 3 | // TodayFlights 4 | // 5 | // Created by Josh Parnham on 10/2/17. 6 | // Copyright © 2017 Josh Parnham. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class TodayFlightsUserDefaults { 12 | static let sharedInstance: UserDefaults? = { 13 | let defaults = UserDefaults(suiteName: "group.com.joshparnham.TodayFlights") 14 | defaults?.register(defaults: ["airlineCode": "", "routeNumber": ""]) 15 | return defaults 16 | }() 17 | } 18 | -------------------------------------------------------------------------------- /TodayFlights/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // TodayFlights 4 | // 5 | // Created by Josh Parnham on 8/12/16. 6 | // Copyright © 2016 Josh Parnham. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | @NSApplicationMain 12 | class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDelegate { 13 | 14 | @IBOutlet weak var addFlightWindow: NSWindow! 15 | 16 | let demoWindowController = DemoWindowController() 17 | 18 | @IBAction func showDemoWindow(_ sender: AnyObject) { 19 | demoWindowController.show() 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /TodayFlights/TodayFlights.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.maps 6 | 7 | com.apple.security.app-sandbox 8 | 9 | com.apple.security.application-groups 10 | 11 | group.com.joshparnham.TodayFlights 12 | 13 | com.apple.security.network.client 14 | 15 | com.apple.security.scripting-targets 16 | 17 | com.apple.security.temporary-exception.apple-events 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /TodayFlightsTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /TodayFlightsTests/TodayFlightsTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // TodayFlightsTests.m 3 | // TodayFlightsTests 4 | // 5 | // Created by Josh Parnham on 29/8/20. 6 | // Copyright © 2020 Josh Parnham. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "FUFlightViewController.h" 12 | 13 | @interface TodayFlightsTests : XCTestCase 14 | 15 | @end 16 | 17 | @implementation TodayFlightsTests 18 | 19 | - (void)testClassExists { 20 | Class class = NSClassFromString(@"FUFlightViewController"); 21 | 22 | XCTAssertNotNil(class); 23 | } 24 | 25 | - (void)testResponseToSelector { 26 | FUFlightViewController *flightViewController = [FUFlightViewController alloc]; 27 | BOOL responseToSelector = [flightViewController respondsToSelector:@selector(initWithFlightCode:airlineCode:)]; 28 | 29 | XCTAssertTrue(responseToSelector); 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /TodayFlightsWidget/Base.lproj/TodayViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /TodayFlights/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 | $(MARKETING_VERSION) 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | LSApplicationCategoryType 24 | public.app-category.utilities 25 | LSMinimumSystemVersion 26 | $(MACOSX_DEPLOYMENT_TARGET) 27 | NSHumanReadableCopyright 28 | Copyright © 2020 Josh Parnham. All rights reserved. 29 | NSMainNibFile 30 | MainMenu 31 | NSPrincipalClass 32 | NSApplication 33 | SUFeedURL 34 | https://joshparnham.com/projects/todayflights/appcast.xml 35 | SUPublicDSAKeyFile 36 | dsa_pub.pem 37 | 38 | 39 | -------------------------------------------------------------------------------- /TodayFlightsWidget/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | TodayFlights 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 19 | CFBundleShortVersionString 20 | $(MARKETING_VERSION) 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | LSMinimumSystemVersion 24 | $(MACOSX_DEPLOYMENT_TARGET) 25 | NSExtension 26 | 27 | NSExtensionAttributes 28 | 29 | NSExtensionPointVersion 30 | 3.0 31 | 32 | NSExtensionPointIdentifier 33 | com.apple.widget-extension 34 | NSExtensionPrincipalClass 35 | TodayViewController 36 | com.apple.notificationcenter.widget.description 37 | TodayFlights 38 | 39 | NSHumanReadableCopyright 40 | Copyright © 2020 Josh Parnham. All rights reserved. 41 | 42 | 43 | -------------------------------------------------------------------------------- /TodayFlights/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "16x16", 5 | "idiom" : "mac", 6 | "filename" : "Icon_16pt.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "16x16", 11 | "idiom" : "mac", 12 | "filename" : "Icon_16pt@2x.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "32x32", 17 | "idiom" : "mac", 18 | "filename" : "Icon_32pt.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "32x32", 23 | "idiom" : "mac", 24 | "filename" : "Icon_32pt@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "128x128", 29 | "idiom" : "mac", 30 | "filename" : "Icon_128pt.png", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "size" : "128x128", 35 | "idiom" : "mac", 36 | "filename" : "Icon_128pt@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "256x256", 41 | "idiom" : "mac", 42 | "filename" : "Icon_256pt.png", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "256x256", 47 | "idiom" : "mac", 48 | "filename" : "Icon_256pt@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "512x512", 53 | "idiom" : "mac", 54 | "filename" : "Icon_512pt.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "512x512", 59 | "idiom" : "mac", 60 | "filename" : "Icon_512pt@2x.png", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /TodayFlightsWidget/EditFlightViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // EditFlightViewController.m 3 | // TodayFlightsWidget 4 | // 5 | // Created by Josh Parnham on 29/8/20. 6 | // Copyright © 2020 Josh Parnham. All rights reserved. 7 | // 8 | 9 | #import "EditFlightViewController.h" 10 | 11 | @implementation EditFlightViewController 12 | 13 | - (void)viewDidLoad { 14 | [super viewDidLoad]; 15 | 16 | NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.joshparnham.TodayFlights"]; 17 | 18 | self.airlineCodeTextField.stringValue = [defaults stringForKey:@"airlineCode"]; 19 | self.routeNumberTextField.stringValue = [defaults stringForKey:@"routeNumber"]; 20 | 21 | self.preferredContentSize = self.view.frame.size; 22 | } 23 | 24 | - (void)viewDidAppear { 25 | if ([self.airlineCodeTextField acceptsFirstResponder]) { 26 | [self.airlineCodeTextField becomeFirstResponder]; 27 | } 28 | } 29 | 30 | #pragma mark - Text field delegate 31 | 32 | - (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelector { 33 | // Enter key pressed 34 | if (commandSelector == @selector(insertNewline:)) { 35 | [self dismissController:nil]; 36 | return YES; 37 | } 38 | return NO; 39 | } 40 | 41 | - (void)controlTextDidChange:(NSNotification *)notification { 42 | NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.joshparnham.TodayFlights"]; 43 | 44 | NSTextField *changedField = [notification object]; 45 | if (changedField == self.airlineCodeTextField) { 46 | [defaults setValue:self.airlineCodeTextField.stringValue forKey:@"airlineCode"]; 47 | } 48 | else if (changedField == self.routeNumberTextField) { 49 | [defaults setValue:self.routeNumberTextField.stringValue forKey:@"routeNumber"]; 50 | } 51 | } 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /TodayFlights/DemoWindowController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DemoWindowController.swift 3 | // TodayFlights 4 | // 5 | // Created by Josh Parnham on 29/8/20. 6 | // Copyright © 2020 Josh Parnham. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class DemoWindowController: NSWindowController { 12 | required init?(coder: NSCoder) { 13 | fatalError("Use -init") 14 | } 15 | 16 | init() { 17 | let window = NSWindow( 18 | contentRect: NSZeroRect, 19 | styleMask: [.titled, .closable, .miniaturizable], 20 | backing: NSWindow.BackingStoreType.buffered, 21 | defer: true 22 | ) 23 | 24 | super.init(window: window) 25 | } 26 | 27 | public func show() { 28 | guard 29 | let defaults = TodayFlightsUserDefaults.sharedInstance, 30 | let airlineCode = defaults.string(forKey: "airlineCode"), 31 | airlineCode.count > 0, 32 | let routeNumber = defaults.string(forKey: "routeNumber"), 33 | let routeNumberInt = UInt64(routeNumber) else { 34 | showAlert() 35 | return 36 | } 37 | 38 | guard 39 | let window = window, 40 | let flightViewController = FUFlightViewController(flightCode: routeNumberInt, airlineCode: airlineCode) else { 41 | return 42 | } 43 | 44 | window.title = "TodayFlights - \(airlineCode)\(routeNumber)" 45 | window.contentViewController = flightViewController 46 | window.center() 47 | window.makeKeyAndOrderFront(self) 48 | } 49 | 50 | private func showAlert() { 51 | let alert = NSAlert() 52 | alert.messageText = "No flight added" 53 | alert.informativeText = "Add flight information in the Add Flight window or the Today widget before viewing the demo" 54 | alert.alertStyle = .warning 55 | alert.addButton(withTitle: "OK") 56 | alert.runModal() 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /TodayFlights/AddFlightViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AddFlightViewController.swift 3 | // TodayFlights 4 | // 5 | // Created by Josh Parnham on 10/2/17. 6 | // Copyright © 2017 Josh Parnham. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class AddFlightViewController: NSViewController, NSTextFieldDelegate { 12 | @IBOutlet weak var airlineCodeTextField: NSTextField! 13 | @IBOutlet weak var routeNumberTextField: NSTextField! 14 | 15 | override func viewDidLoad() { 16 | guard let defaults = TodayFlightsUserDefaults.sharedInstance else { return } 17 | 18 | if let airlineCode = defaults.string(forKey: "airlineCode") { 19 | airlineCodeTextField.stringValue = airlineCode 20 | } 21 | if let routeNumber = defaults.string(forKey: "routeNumber") { 22 | routeNumberTextField.stringValue = routeNumber 23 | } 24 | } 25 | 26 | func controlTextDidChange(_ notification: Notification) { 27 | guard let defaults = TodayFlightsUserDefaults.sharedInstance else { return } 28 | 29 | let changedField = notification.object 30 | if changedField as? NSTextField == airlineCodeTextField { 31 | defaults.setValue(airlineCodeTextField.stringValue, forKey: "airlineCode") 32 | } 33 | else if changedField as? NSTextField == routeNumberTextField { 34 | defaults.setValue(routeNumberTextField.stringValue, forKey: "routeNumber") 35 | } 36 | } 37 | 38 | @IBAction func save(_ sender: NSButton) { 39 | guard let defaults = TodayFlightsUserDefaults.sharedInstance else { return } 40 | 41 | defaults.setValue(airlineCodeTextField.stringValue, forKey: "airlineCode") 42 | defaults.setValue(routeNumberTextField.stringValue, forKey: "routeNumber") 43 | } 44 | 45 | @IBAction func helpButtonClicked(_ sender: NSButton) { 46 | let helpUrlString = "https://support.apple.com/guide/mac-help/mchl2fb1258f/mac#mchl81797ce0" 47 | guard let url = URL(string: helpUrlString) else { 48 | return 49 | } 50 | 51 | NSWorkspace.shared.open(url) 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /TodayFlights/dsa_pub.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIGOzCCBC4GByqGSM44BAEwggQhAoICAQDN1yaMCtyPf1xffE+jSzVmlUX/BfVL 3 | f4nqET6At+h6oDgG3YsXhzTy6vEHZ83P1WB7dRHn6JDD4z4e38CfEG8SsAIBAUtZ 4 | Mlnya6Jnf98adYzBwgdNop/iL0MWH4rNNo3U/lYns9dtb/zy22J5m6xBZ3nd3jdJ 5 | RDDghsbNcef4g+b0b0V0USzl2DpCJrNCdypAEohxP9TkKiMexMPcDRjh50Bq1yTg 6 | IEEycJHqoYwVxjV8bfynN+5Ookfa6vG1asTD1Oyg2SAn5jSwN+y73UI3updeNw8/ 7 | kXbIxcVhW4fF93924ByAaAEotTPMcDrO7MusZLi5L91xCNzqN4A9j7IY55rwF05c 8 | IL8LjoaPA1/z2ngkoRF6Nphl6ao3cgkSyXTZ3T0Lp0IRuRbPiDddK5QcoVGUSQOL 9 | kK2sRgUrxzwi6wkxGYaU2cIFIIzot9jhSkbOcjYFYe1fAq8a8xFLb6DvjcADpkqP 10 | qwGQYsryQlelcDOZfRteUeMaMcqSs9ihxWMiGOU1c7Kl3bTJlKF5xfcvR0xWU9X4 11 | FrhUC/KTPEG6uUX7E6MWpUMYSQnZGIywr2zxkOuh8RI4o0QO/RUg79D1cuzimt0j 12 | kN6mMHXKsXLe+kwPLnFGQygUZIfoCaiHFcyMGepQ5sdshh8xrq/tJs/kAqq8iF5H 13 | WTPGsZUycf/ddQIVAMhTuddCgkhUumKNYS51B1xClJEBAoICAQC9Moy/aHNhHHiC 14 | j4Sunw5f785+JQ5FMXV6yYBVoVrAxDxzJQDD53D09loD+ZGn1NHyTHClYRIu30kC 15 | 0Ai+yeO62CBeKwYjljVxJOiC0zt3rRhgiGktSA7DTkoZ0uj0yyRnCx4YMYro/ImT 16 | v5dEKYxnA4SiXzcTPmbQPgi4N7g6I/DHGx/IlhijCySH+FwtiBGpVHygvZ1b45bS 17 | HvAX9Hw//zuYzhCaO6DoxQ98gltYeUTWHkQTz5lzU2xT9xU8itsQ+BbqenaPkKwm 18 | PsHRWZorShwcjIvb+5NeKrH8VD1Om+RVb+3JIARSqbET4dIpr896FUIrM/Rjij/u 19 | dlwIck3OKGJEP3Fy7zBzai+rPtvdZln4W6lWAe8IGd2AtCy/u/HEcTtiVwZBIzDc 20 | jtV585Hg70aUYq7RVJV/kn2TRgbEAJESgqxZFkiNlhXeAprya/vgoejiZL5HXiXb 21 | AxhjQz/+YBXuChAywKg855WMshO1ASx1gSWO2TdxtG3D/UATHHYo/Q5g4NF61jxB 22 | tydIWCIEzqojgL+SjG5WtXqP/YAgWv9eqJwV5YnxF2eKjXJX2B9WptXARJTLRoZC 23 | fdUGPZjkWQe90+y36Xhpgp7E8tpc7YOBXUveenCfAD+QSF1+KH6Iu+BvBT1nqStq 24 | +G3Dv2CTZIGzL9DtxIN35Au+QSgbCAOCAgUAAoICAHPIFHRQ1NOmaFYBA1vvFiF0 25 | zthHg1I7i8BVrRgr+uOCuO4jLtMquCr+yZQxxdkfdq0knYBCuam+A4UG3NzSRTI9 26 | 612ZkIJR3DAJ8CAC+trZAKnyzLWkkLW/HFnMBublXOxy45bYwFm237KNNpp92H9d 27 | k0XjcDWi1fAfs0XfDaQqAXntT7/hkA3OSA7eS1dPVvt/YQljzgTgfuwVn1RK0lkP 28 | q2k8TR0TwKVcaCJw7S5PWXBWk41Zs8ww2MO5Mi012buEVLy7igk/RqFAymj9xWw4 29 | 72U6OHV94uVT66M6i76rAbK5fr8LEcdR0cPuQjdOa2tER31Zx6h1q3fudM6CgiEE 30 | BKtG4LJpxdl2sMmrGNJtkbi2V2QHGZ+3lHlz8k5JFODC8eunxE6mkXND2MpgFJBV 31 | zpJ7SdXxkEmKw2Yf9oX0+QfsiHXgVxBHEvq02LWQtGEc+gisn2NFR9u6fhNLkT+y 32 | rbZgnUIPVBGl1X0HlY8gs/1uSF5pEbGIHT7zj83yG1ionSdxOWq5bqB8Nloj0UOa 33 | Ef8QdYRNxcIqg67bstu51K2AGuL5AFR31dq9afqpJ3JncIpzOHJNzZvyV9wuMH3j 34 | Cbng5bZudleT26FNsQ1EmBTsYeV4dgEmzp6LvElDutAVh+zOTbq1JL/xTyY6GOin 35 | Cq3Ze4+UTKt9/gmRqFvH 36 | -----END PUBLIC KEY----- 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TodayFlights 2 | 3 | TodayFlights is a Notification Center widget that allows you to monitor flights as they depart, fly and land. It uses the system flight tracking framework included in macOS. 4 | 5 | *Please note that Notification Center's Today widgets have been [deprecated](https://developer.apple.com/documentation/notificationcenter) in macOS 11* 6 | 7 |

8 | 9 | 10 |

11 | 12 | ## Installation 13 | 14 | * [Download](https://github.com/josh-/TodayFlights/releases/latest) the latest DMG. 15 | 16 | ## Usage 17 | 18 | 1. Download the DMG file from above and copy the TodayFlights app to the Applications folder 19 | 2. Launch the TodayFlights app 20 | 3. Open [Notification Center](https://support.apple.com/HT204079), select "Today" and click "1 new" at the bottom of the panel 21 | 4. Add the TodayFlights widget by clicking on the plus icon (+) 22 | 5. Start tracking a flight number by hovering over the widget and clicking the info button that appears in the top-right corner 23 | 24 | A flight number is composed of the two character Airline Code and one to four digit Route Number, for example, for the flight number `MH129`: 25 | 26 | |Airline Code|Route Number| 27 | |-|-| 28 | |`MH`|`129`| 29 | 30 | ## TODO 31 | 32 | - Support sending optional user notifications when the flight departs, experiences delays and lands. 33 | - Localisation 34 | 35 | ## Requirements 36 | 37 | * macOS 10.15 or later 38 | 39 | ## License 40 | 41 | The MIT License (MIT) 42 | 43 | Copyright (c) 2020 Josh Parnham 44 | 45 | Permission is hereby granted, free of charge, to any person obtaining a copy 46 | of this software and associated documentation files (the "Software"), to deal 47 | in the Software without restriction, including without limitation the rights 48 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 49 | copies of the Software, and to permit persons to whom the Software is 50 | furnished to do so, subject to the following conditions: 51 | 52 | The above copyright notice and this permission notice shall be included in all 53 | copies or substantial portions of the Software. 54 | 55 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 56 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 57 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 58 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 59 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 60 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 61 | SOFTWARE. 62 | -------------------------------------------------------------------------------- /TodayFlightsWidget/FirstRunViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /TodayFlightsWidget/TodayViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // TodayViewController.m 3 | // TodayFlightsWidget 4 | // 5 | // Created by Josh Parnham on 27/8/20. 6 | // Copyright © 2020 Josh Parnham. All rights reserved. 7 | // 8 | 9 | #import "TodayViewController.h" 10 | #import 11 | 12 | #import "FUFlightViewController.h" 13 | 14 | #import "EditFlightViewController.h" 15 | #import "FirstRunViewController.h" 16 | 17 | #define WIDGET_HEIGHT 515 18 | 19 | @interface TodayViewController () 20 | 21 | @property (strong, nonatomic) FUFlightViewController *flightViewController; 22 | @property (strong, nonatomic) EditFlightViewController *editFlightViewController; 23 | @property (strong, nonatomic) FirstRunViewController *firstRunViewController; 24 | 25 | @property (strong) NSDate *lastAttemptedDismissTime; 26 | 27 | @end 28 | 29 | @implementation TodayViewController 30 | 31 | - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 32 | self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 33 | if (self) { 34 | NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.joshparnham.TodayFlights"]; 35 | [defaults registerDefaults:@{@"airlineCode" : @"", @"routeNumber" : @""}]; 36 | 37 | self.lastAttemptedDismissTime = [NSDate date]; 38 | } 39 | return self; 40 | } 41 | 42 | - (FUFlightViewController *)flightViewController { 43 | if (!_flightViewController) { 44 | NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.joshparnham.TodayFlights"]; 45 | NSString *airlineCode = [defaults stringForKey:@"airlineCode"]; 46 | NSString *routeNumber = [defaults stringForKey:@"routeNumber"]; 47 | 48 | _flightViewController = [[FUFlightViewController alloc] initWithFlightCode:routeNumber.integerValue airlineCode:airlineCode]; 49 | 50 | _flightViewController.view.autoresizingMask = NSViewWidthSizable; 51 | _flightViewController.view.frame = NSMakeRect(0, 0, 314, 510); 52 | _flightViewController.view.autoresizesSubviews = YES; 53 | } 54 | 55 | return _flightViewController; 56 | } 57 | 58 | - (EditFlightViewController *)editFlightViewController { 59 | if (!_editFlightViewController) { 60 | _editFlightViewController = [[EditFlightViewController alloc] init]; 61 | } 62 | 63 | return _editFlightViewController; 64 | } 65 | 66 | - (FirstRunViewController *)firstRunViewController { 67 | if (!_firstRunViewController) { 68 | _firstRunViewController = [[FirstRunViewController alloc] init]; 69 | } 70 | 71 | return _firstRunViewController; 72 | } 73 | 74 | #pragma mark - View lifecycle 75 | 76 | - (void)viewDidLoad { 77 | 78 | [super viewDidLoad]; 79 | 80 | if ([self shouldDisplayFirstRunInformation]) { 81 | [self.view addSubview:self.firstRunViewController.view]; 82 | self.preferredContentSize = self.firstRunViewController.preferredContentSize; 83 | } 84 | else { 85 | [self.view addSubview:self.flightViewController.view]; 86 | self.preferredContentSize = CGSizeMake(0, WIDGET_HEIGHT); 87 | 88 | [self.view setAutoresizesSubviews:YES]; 89 | } 90 | } 91 | 92 | #pragma mark - Methods 93 | 94 | - (void)reloadFlightData { 95 | [self.firstRunViewController.view removeFromSuperview]; 96 | 97 | [self.flightViewController.view removeFromSuperview]; 98 | self.flightViewController = nil; 99 | 100 | if ([self shouldDisplayFirstRunInformation]) { 101 | [self.view addSubview:self.firstRunViewController.view]; 102 | self.preferredContentSize = self.firstRunViewController.preferredContentSize; 103 | } 104 | else { 105 | self.preferredContentSize = CGSizeMake(0, WIDGET_HEIGHT); 106 | [self.view addSubview:self.flightViewController.view]; 107 | } 108 | } 109 | 110 | - (void)endWidgetEditingMode { 111 | id extensionContextDelegate; 112 | if ([self.extensionContext respondsToSelector:@selector(delegate)]) { 113 | extensionContextDelegate = [self.extensionContext performSelector:@selector(delegate)]; 114 | } 115 | 116 | SEL setWidgetModeSelector = NSSelectorFromString(@"setWidgetMode:"); 117 | if ([self.extensionContext respondsToSelector:setWidgetModeSelector]) { 118 | NSMethodSignature *signature = [[extensionContextDelegate class] instanceMethodSignatureForSelector:setWidgetModeSelector]; 119 | 120 | NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; 121 | invocation.selector = setWidgetModeSelector; 122 | [invocation performSelector:@selector(invokeWithTarget:) withObject:extensionContextDelegate afterDelay:0.1]; // Needs to be performed after delay to prevent crash 123 | } 124 | } 125 | 126 | - (BOOL)shouldDisplayFirstRunInformation { 127 | NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.joshparnham.TodayFlights"]; 128 | return [[defaults stringForKey:@"airlineCode"] length] == 0 || [[defaults stringForKey:@"routeNumber"] length] == 0; 129 | } 130 | 131 | #pragma mark - Widget provisioning delegate 132 | 133 | - (void)widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult result))completionHandler { 134 | [self reloadFlightData]; 135 | completionHandler(NCUpdateResultNewData); 136 | } 137 | 138 | - (NSEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(NSEdgeInsets)defaultMarginInset { 139 | return NSEdgeInsetsMake(0, 3, 0, 0); 140 | } 141 | 142 | - (void)widgetDidBeginEditing { 143 | if ([self.presentedViewControllers containsObject:self.editFlightViewController] && [[NSDate date] timeIntervalSinceDate:self.lastAttemptedDismissTime] <= 1) { 144 | // This method is often called repeatedly, so do nothing if we attempted to dismiss the edit controller in the last second 145 | } 146 | else { 147 | if ([self.presentedViewControllers containsObject:self.editFlightViewController]) { 148 | // If the edit controller is being shown, then dismiss it 149 | [self endWidgetEditingMode]; 150 | [self reloadFlightData]; 151 | 152 | self.lastAttemptedDismissTime = [NSDate date]; 153 | [self dismissViewController:self.editFlightViewController]; 154 | } 155 | else { 156 | // Since this method can also be called when the info button is pressed, show the edit controller if it not currently being shown 157 | // https://stackoverflow.com/questions/24970533/show-viewcontroller-on-extension-info-button-edit-mode 158 | int64_t timeDelta = 0.5 * NSEC_PER_SEC; 159 | dispatch_after(dispatch_time(DISPATCH_TIME_NOW, timeDelta), dispatch_get_main_queue(), ^{ 160 | [self presentViewControllerInWidget:self.editFlightViewController]; 161 | }); 162 | } 163 | } 164 | } 165 | 166 | - (void)widgetDidEndEditing { 167 | if ([self presentingViewController] == self.editFlightViewController) { 168 | [self dismissViewController:self.editFlightViewController]; 169 | } 170 | } 171 | 172 | - (BOOL)widgetAllowsEditing { 173 | return YES; 174 | } 175 | 176 | @end 177 | 178 | -------------------------------------------------------------------------------- /TodayFlightsWidget/EditFlightViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /TodayFlights/Base.lproj/MainMenu.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | Enter a flight number – composed of the two character Airline Code and one to four digit 186 | Route Number. 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | -------------------------------------------------------------------------------- /TodayFlights.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 034A7A921E4D31F700619BFF /* UserDefaults+AppGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 034A7A911E4D31F700619BFF /* UserDefaults+AppGroup.swift */; }; 11 | 034A7A941E4D33DE00619BFF /* AddFlightViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 034A7A931E4D33DE00619BFF /* AddFlightViewController.swift */; }; 12 | 0350634F24FA32DC00E71269 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 0350634D24FA32DB00E71269 /* Info.plist */; }; 13 | 0350635024FA32F000E71269 /* TodayFlightsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 0350634C24FA32DB00E71269 /* TodayFlightsTests.m */; }; 14 | 0350635124FA343400E71269 /* FlightUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0388D66D24ED4A90007BA51E /* FlightUtilities.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 15 | 035063F524FD081300E71269 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 035063F324FD06D600E71269 /* Sparkle.framework */; }; 16 | 035063F624FD081300E71269 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 035063F324FD06D600E71269 /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 17 | 0351E13224F9FCF800E9976F /* FirstRunViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0351E12B24F9FCF800E9976F /* FirstRunViewController.xib */; }; 18 | 0351E13324F9FCF800E9976F /* TodayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0351E12D24F9FCF800E9976F /* TodayViewController.m */; }; 19 | 0351E13424F9FCF800E9976F /* FirstRunViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0351E12E24F9FCF800E9976F /* FirstRunViewController.m */; }; 20 | 0351E13524F9FCF800E9976F /* EditFlightViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0351E12F24F9FCF800E9976F /* EditFlightViewController.xib */; }; 21 | 0351E13624F9FCF800E9976F /* EditFlightViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0351E13024F9FCF800E9976F /* EditFlightViewController.m */; }; 22 | 0351E14024F9FF2900E9976F /* TodayViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0351E13E24F9FF2900E9976F /* TodayViewController.xib */; }; 23 | 0351E15724FA08B100E9976F /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0351E15524FA08B100E9976F /* InfoPlist.strings */; }; 24 | 0351E15E24FA275700E9976F /* DemoWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0351E15C24FA270B00E9976F /* DemoWindowController.swift */; }; 25 | 03781E211DF987B200EF1ABF /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03781E201DF987B200EF1ABF /* AppKit.framework */; }; 26 | 03781E231DF987B600EF1ABF /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03781E221DF987B600EF1ABF /* Cocoa.framework */; }; 27 | 037BFBDC1E4D776D0022A75B /* dsa_pub.pem in CopyFiles */ = {isa = PBXBuildFile; fileRef = 037BFBDB1E4D776D0022A75B /* dsa_pub.pem */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 28 | 0388D66E24ED4A90007BA51E /* FlightUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0388D66D24ED4A90007BA51E /* FlightUtilities.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 29 | 0388D71F24F74A21007BA51E /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 036D7BF91DFAB0ED00B28048 /* NotificationCenter.framework */; }; 30 | 0388D72E24F74A21007BA51E /* TodayFlightsWidget.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 0388D71E24F74A21007BA51E /* TodayFlightsWidget.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 31 | 0388D73224F9D7F4007BA51E /* FlightUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0388D66D24ED4A90007BA51E /* FlightUtilities.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 32 | 038F08D01E4AAA8E0027BE91 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 038F08CF1E4AAA8E0027BE91 /* AppDelegate.swift */; }; 33 | 038F09021E4AAAAE0027BE91 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 038F09001E4AAAAE0027BE91 /* MainMenu.xib */; }; 34 | 038F090D1E4AAF000027BE91 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 038F09061E4AAABD0027BE91 /* Assets.xcassets */; }; 35 | 03E1CD111E4C22510009E28F /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03E1CD101E4C22510009E28F /* MapKit.framework */; }; 36 | /* End PBXBuildFile section */ 37 | 38 | /* Begin PBXContainerItemProxy section */ 39 | 0350634624FA32B900E71269 /* PBXContainerItemProxy */ = { 40 | isa = PBXContainerItemProxy; 41 | containerPortal = 03781DD71DF9825800EF1ABF /* Project object */; 42 | proxyType = 1; 43 | remoteGlobalIDString = 03781DDE1DF9825800EF1ABF; 44 | remoteInfo = TodayFlights; 45 | }; 46 | 0388D72C24F74A21007BA51E /* PBXContainerItemProxy */ = { 47 | isa = PBXContainerItemProxy; 48 | containerPortal = 03781DD71DF9825800EF1ABF /* Project object */; 49 | proxyType = 1; 50 | remoteGlobalIDString = 0388D71D24F74A21007BA51E; 51 | remoteInfo = AnotherTodayTest; 52 | }; 53 | /* End PBXContainerItemProxy section */ 54 | 55 | /* Begin PBXCopyFilesBuildPhase section */ 56 | 036D7C0D1DFAB0ED00B28048 /* Embed App Extensions */ = { 57 | isa = PBXCopyFilesBuildPhase; 58 | buildActionMask = 2147483647; 59 | dstPath = ""; 60 | dstSubfolderSpec = 13; 61 | files = ( 62 | 0388D72E24F74A21007BA51E /* TodayFlightsWidget.appex in Embed App Extensions */, 63 | ); 64 | name = "Embed App Extensions"; 65 | runOnlyForDeploymentPostprocessing = 0; 66 | }; 67 | 037BFBD81E4D68620022A75B /* CopyFiles */ = { 68 | isa = PBXCopyFilesBuildPhase; 69 | buildActionMask = 2147483647; 70 | dstPath = ""; 71 | dstSubfolderSpec = 10; 72 | files = ( 73 | 035063F624FD081300E71269 /* Sparkle.framework in CopyFiles */, 74 | ); 75 | runOnlyForDeploymentPostprocessing = 0; 76 | }; 77 | 037BFBDA1E4D775C0022A75B /* CopyFiles */ = { 78 | isa = PBXCopyFilesBuildPhase; 79 | buildActionMask = 2147483647; 80 | dstPath = ""; 81 | dstSubfolderSpec = 7; 82 | files = ( 83 | 037BFBDC1E4D776D0022A75B /* dsa_pub.pem in CopyFiles */, 84 | ); 85 | runOnlyForDeploymentPostprocessing = 0; 86 | }; 87 | /* End PBXCopyFilesBuildPhase section */ 88 | 89 | /* Begin PBXFileReference section */ 90 | 034A7A911E4D31F700619BFF /* UserDefaults+AppGroup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UserDefaults+AppGroup.swift"; path = "TodayFlights/UserDefaults+AppGroup.swift"; sourceTree = SOURCE_ROOT; }; 91 | 034A7A931E4D33DE00619BFF /* AddFlightViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AddFlightViewController.swift; path = TodayFlights/AddFlightViewController.swift; sourceTree = SOURCE_ROOT; }; 92 | 0350634124FA32B900E71269 /* TodayFlightsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TodayFlightsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 93 | 0350634C24FA32DB00E71269 /* TodayFlightsTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TodayFlightsTests.m; sourceTree = ""; }; 94 | 0350634D24FA32DB00E71269 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 95 | 035063F324FD06D600E71269 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = Carthage/Build/Mac/Sparkle.framework; sourceTree = ""; }; 96 | 0351E12924F9FCCF00E9976F /* TodayFlightsWidget.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = TodayFlightsWidget.entitlements; path = TodayFlightsWidget/TodayFlightsWidget.entitlements; sourceTree = SOURCE_ROOT; }; 97 | 0351E12A24F9FCF800E9976F /* FirstRunViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FirstRunViewController.h; path = TodayFlightsWidget/FirstRunViewController.h; sourceTree = SOURCE_ROOT; }; 98 | 0351E12B24F9FCF800E9976F /* FirstRunViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = FirstRunViewController.xib; path = TodayFlightsWidget/FirstRunViewController.xib; sourceTree = SOURCE_ROOT; }; 99 | 0351E12C24F9FCF800E9976F /* TodayViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TodayViewController.h; path = TodayFlightsWidget/TodayViewController.h; sourceTree = SOURCE_ROOT; }; 100 | 0351E12D24F9FCF800E9976F /* TodayViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TodayViewController.m; path = TodayFlightsWidget/TodayViewController.m; sourceTree = SOURCE_ROOT; }; 101 | 0351E12E24F9FCF800E9976F /* FirstRunViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FirstRunViewController.m; path = TodayFlightsWidget/FirstRunViewController.m; sourceTree = SOURCE_ROOT; }; 102 | 0351E12F24F9FCF800E9976F /* EditFlightViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = EditFlightViewController.xib; path = TodayFlightsWidget/EditFlightViewController.xib; sourceTree = SOURCE_ROOT; }; 103 | 0351E13024F9FCF800E9976F /* EditFlightViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EditFlightViewController.m; path = TodayFlightsWidget/EditFlightViewController.m; sourceTree = SOURCE_ROOT; }; 104 | 0351E13124F9FCF800E9976F /* EditFlightViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EditFlightViewController.h; path = TodayFlightsWidget/EditFlightViewController.h; sourceTree = SOURCE_ROOT; }; 105 | 0351E13F24F9FF2900E9976F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = TodayViewController.xib; sourceTree = ""; }; 106 | 0351E14924FA081000E9976F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = TodayFlightsWidget/Info.plist; sourceTree = SOURCE_ROOT; }; 107 | 0351E15624FA08B100E9976F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = ""; }; 108 | 0351E15C24FA270B00E9976F /* DemoWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DemoWindowController.swift; path = TodayFlights/DemoWindowController.swift; sourceTree = SOURCE_ROOT; }; 109 | 036D7BF91DFAB0ED00B28048 /* NotificationCenter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NotificationCenter.framework; path = System/Library/Frameworks/NotificationCenter.framework; sourceTree = SDKROOT; }; 110 | 03781DDF1DF9825800EF1ABF /* TodayFlights.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TodayFlights.app; sourceTree = BUILT_PRODUCTS_DIR; }; 111 | 03781E201DF987B200EF1ABF /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; 112 | 03781E221DF987B600EF1ABF /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; 113 | 037BFBDB1E4D776D0022A75B /* dsa_pub.pem */ = {isa = PBXFileReference; lastKnownFileType = text; name = dsa_pub.pem; path = ../TodayFlights/dsa_pub.pem; sourceTree = ""; }; 114 | 0388D66D24ED4A90007BA51E /* FlightUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FlightUtilities.framework; path = /System/Library/PrivateFrameworks/FlightUtilities.framework; sourceTree = ""; }; 115 | 0388D6A124ED53AF007BA51E /* FUFlightViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUFlightViewController.h; sourceTree = ""; }; 116 | 0388D71E24F74A21007BA51E /* TodayFlightsWidget.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = TodayFlightsWidget.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 117 | 038F08CF1E4AAA8E0027BE91 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = TodayFlights/AppDelegate.swift; sourceTree = SOURCE_ROOT; }; 118 | 038F09011E4AAAAE0027BE91 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = TodayFlights/Base.lproj/MainMenu.xib; sourceTree = SOURCE_ROOT; }; 119 | 038F09061E4AAABD0027BE91 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = TodayFlights/Assets.xcassets; sourceTree = SOURCE_ROOT; }; 120 | 038F09081E4AAAD60027BE91 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = TodayFlights/Info.plist; sourceTree = SOURCE_ROOT; }; 121 | 038F09091E4AAAD60027BE91 /* TodayFlights.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; name = TodayFlights.entitlements; path = TodayFlights/TodayFlights.entitlements; sourceTree = SOURCE_ROOT; }; 122 | 03E1CD101E4C22510009E28F /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = System/Library/Frameworks/MapKit.framework; sourceTree = SDKROOT; }; 123 | /* End PBXFileReference section */ 124 | 125 | /* Begin PBXFrameworksBuildPhase section */ 126 | 0350633E24FA32B900E71269 /* Frameworks */ = { 127 | isa = PBXFrameworksBuildPhase; 128 | buildActionMask = 2147483647; 129 | files = ( 130 | 0350635124FA343400E71269 /* FlightUtilities.framework in Frameworks */, 131 | ); 132 | runOnlyForDeploymentPostprocessing = 0; 133 | }; 134 | 03781DDC1DF9825800EF1ABF /* Frameworks */ = { 135 | isa = PBXFrameworksBuildPhase; 136 | buildActionMask = 2147483647; 137 | files = ( 138 | 03781E231DF987B600EF1ABF /* Cocoa.framework in Frameworks */, 139 | 03781E211DF987B200EF1ABF /* AppKit.framework in Frameworks */, 140 | 035063F524FD081300E71269 /* Sparkle.framework in Frameworks */, 141 | 03E1CD111E4C22510009E28F /* MapKit.framework in Frameworks */, 142 | 0388D66E24ED4A90007BA51E /* FlightUtilities.framework in Frameworks */, 143 | ); 144 | runOnlyForDeploymentPostprocessing = 0; 145 | }; 146 | 0388D71B24F74A21007BA51E /* Frameworks */ = { 147 | isa = PBXFrameworksBuildPhase; 148 | buildActionMask = 2147483647; 149 | files = ( 150 | 0388D73224F9D7F4007BA51E /* FlightUtilities.framework in Frameworks */, 151 | 0388D71F24F74A21007BA51E /* NotificationCenter.framework in Frameworks */, 152 | ); 153 | runOnlyForDeploymentPostprocessing = 0; 154 | }; 155 | /* End PBXFrameworksBuildPhase section */ 156 | 157 | /* Begin PBXGroup section */ 158 | 0350634B24FA32DB00E71269 /* TodayFlightsTests */ = { 159 | isa = PBXGroup; 160 | children = ( 161 | 0350634C24FA32DB00E71269 /* TodayFlightsTests.m */, 162 | 0350634D24FA32DB00E71269 /* Info.plist */, 163 | ); 164 | path = TodayFlightsTests; 165 | sourceTree = ""; 166 | }; 167 | 0351E13D24F9FF2900E9976F /* Base.lproj */ = { 168 | isa = PBXGroup; 169 | children = ( 170 | 0351E13E24F9FF2900E9976F /* TodayViewController.xib */, 171 | ); 172 | name = Base.lproj; 173 | path = TodayFlightsWidget/Base.lproj; 174 | sourceTree = SOURCE_ROOT; 175 | }; 176 | 0351E15424FA08B100E9976F /* en.lproj */ = { 177 | isa = PBXGroup; 178 | children = ( 179 | 0351E15524FA08B100E9976F /* InfoPlist.strings */, 180 | ); 181 | name = en.lproj; 182 | path = TodayFlightsWidget/en.lproj; 183 | sourceTree = SOURCE_ROOT; 184 | }; 185 | 03781DD61DF9825800EF1ABF = { 186 | isa = PBXGroup; 187 | children = ( 188 | 03781DE11DF9825800EF1ABF /* App */, 189 | 0388D72024F74A21007BA51E /* TodayFlightsWidget */, 190 | 0350634B24FA32DB00E71269 /* TodayFlightsTests */, 191 | 03781DE01DF9825800EF1ABF /* Products */, 192 | 03781E1F1DF987B200EF1ABF /* Frameworks */, 193 | ); 194 | sourceTree = ""; 195 | }; 196 | 03781DE01DF9825800EF1ABF /* Products */ = { 197 | isa = PBXGroup; 198 | children = ( 199 | 03781DDF1DF9825800EF1ABF /* TodayFlights.app */, 200 | 0388D71E24F74A21007BA51E /* TodayFlightsWidget.appex */, 201 | 0350634124FA32B900E71269 /* TodayFlightsTests.xctest */, 202 | ); 203 | name = Products; 204 | sourceTree = ""; 205 | }; 206 | 03781DE11DF9825800EF1ABF /* App */ = { 207 | isa = PBXGroup; 208 | children = ( 209 | 038F08D31E4AAAA60027BE91 /* PrivateHeaders */, 210 | 038F08CF1E4AAA8E0027BE91 /* AppDelegate.swift */, 211 | 038F09001E4AAAAE0027BE91 /* MainMenu.xib */, 212 | 034A7A931E4D33DE00619BFF /* AddFlightViewController.swift */, 213 | 0351E15C24FA270B00E9976F /* DemoWindowController.swift */, 214 | 034A7A911E4D31F700619BFF /* UserDefaults+AppGroup.swift */, 215 | 038F09061E4AAABD0027BE91 /* Assets.xcassets */, 216 | 03AD70F01E1AF3BA00874F53 /* Supporting Files */, 217 | ); 218 | name = App; 219 | path = FlightAppTest; 220 | sourceTree = ""; 221 | }; 222 | 03781E1F1DF987B200EF1ABF /* Frameworks */ = { 223 | isa = PBXGroup; 224 | children = ( 225 | 035063F324FD06D600E71269 /* Sparkle.framework */, 226 | 0388D66D24ED4A90007BA51E /* FlightUtilities.framework */, 227 | 03E1CD101E4C22510009E28F /* MapKit.framework */, 228 | 036D7BF91DFAB0ED00B28048 /* NotificationCenter.framework */, 229 | 03781E221DF987B600EF1ABF /* Cocoa.framework */, 230 | 03781E201DF987B200EF1ABF /* AppKit.framework */, 231 | ); 232 | name = Frameworks; 233 | sourceTree = ""; 234 | }; 235 | 0388D72024F74A21007BA51E /* TodayFlightsWidget */ = { 236 | isa = PBXGroup; 237 | children = ( 238 | 0388D75B24F9EFAD007BA51E /* View Controllers */, 239 | 0388D75C24F9EFBD007BA51E /* Supporting Files */, 240 | ); 241 | path = TodayFlightsWidget; 242 | sourceTree = ""; 243 | }; 244 | 0388D75B24F9EFAD007BA51E /* View Controllers */ = { 245 | isa = PBXGroup; 246 | children = ( 247 | 0351E13124F9FCF800E9976F /* EditFlightViewController.h */, 248 | 0351E13024F9FCF800E9976F /* EditFlightViewController.m */, 249 | 0351E12F24F9FCF800E9976F /* EditFlightViewController.xib */, 250 | 0351E12A24F9FCF800E9976F /* FirstRunViewController.h */, 251 | 0351E12E24F9FCF800E9976F /* FirstRunViewController.m */, 252 | 0351E12B24F9FCF800E9976F /* FirstRunViewController.xib */, 253 | 0351E12C24F9FCF800E9976F /* TodayViewController.h */, 254 | 0351E12D24F9FCF800E9976F /* TodayViewController.m */, 255 | 0351E13D24F9FF2900E9976F /* Base.lproj */, 256 | ); 257 | path = "View Controllers"; 258 | sourceTree = ""; 259 | }; 260 | 0388D75C24F9EFBD007BA51E /* Supporting Files */ = { 261 | isa = PBXGroup; 262 | children = ( 263 | 0351E15424FA08B100E9976F /* en.lproj */, 264 | 0351E14924FA081000E9976F /* Info.plist */, 265 | 0351E12924F9FCCF00E9976F /* TodayFlightsWidget.entitlements */, 266 | ); 267 | path = "Supporting Files"; 268 | sourceTree = ""; 269 | }; 270 | 038F08D31E4AAAA60027BE91 /* PrivateHeaders */ = { 271 | isa = PBXGroup; 272 | children = ( 273 | 038F08D41E4AAAA60027BE91 /* FlightUtilities */, 274 | ); 275 | name = PrivateHeaders; 276 | path = TodayFlights/PrivateHeaders; 277 | sourceTree = SOURCE_ROOT; 278 | }; 279 | 038F08D41E4AAAA60027BE91 /* FlightUtilities */ = { 280 | isa = PBXGroup; 281 | children = ( 282 | 0388D6A124ED53AF007BA51E /* FUFlightViewController.h */, 283 | ); 284 | path = FlightUtilities; 285 | sourceTree = ""; 286 | }; 287 | 03AD70F01E1AF3BA00874F53 /* Supporting Files */ = { 288 | isa = PBXGroup; 289 | children = ( 290 | 038F09081E4AAAD60027BE91 /* Info.plist */, 291 | 038F09091E4AAAD60027BE91 /* TodayFlights.entitlements */, 292 | 037BFBDB1E4D776D0022A75B /* dsa_pub.pem */, 293 | ); 294 | name = "Supporting Files"; 295 | sourceTree = ""; 296 | }; 297 | /* End PBXGroup section */ 298 | 299 | /* Begin PBXNativeTarget section */ 300 | 0350634024FA32B900E71269 /* TodayFlightsTests */ = { 301 | isa = PBXNativeTarget; 302 | buildConfigurationList = 0350634824FA32B900E71269 /* Build configuration list for PBXNativeTarget "TodayFlightsTests" */; 303 | buildPhases = ( 304 | 0350633D24FA32B900E71269 /* Sources */, 305 | 0350633E24FA32B900E71269 /* Frameworks */, 306 | 0350633F24FA32B900E71269 /* Resources */, 307 | ); 308 | buildRules = ( 309 | ); 310 | dependencies = ( 311 | 0350634724FA32B900E71269 /* PBXTargetDependency */, 312 | ); 313 | name = TodayFlightsTests; 314 | productName = TodayFlightsTests; 315 | productReference = 0350634124FA32B900E71269 /* TodayFlightsTests.xctest */; 316 | productType = "com.apple.product-type.bundle.unit-test"; 317 | }; 318 | 03781DDE1DF9825800EF1ABF /* TodayFlights */ = { 319 | isa = PBXNativeTarget; 320 | buildConfigurationList = 03781DEC1DF9825800EF1ABF /* Build configuration list for PBXNativeTarget "TodayFlights" */; 321 | buildPhases = ( 322 | 03781DDB1DF9825800EF1ABF /* Sources */, 323 | 03781DDC1DF9825800EF1ABF /* Frameworks */, 324 | 03781DDD1DF9825800EF1ABF /* Resources */, 325 | 036D7C0D1DFAB0ED00B28048 /* Embed App Extensions */, 326 | 037BFBD81E4D68620022A75B /* CopyFiles */, 327 | 037BFBDA1E4D775C0022A75B /* CopyFiles */, 328 | 0308B3252508F6E50090D507 /* ShellScript */, 329 | ); 330 | buildRules = ( 331 | ); 332 | dependencies = ( 333 | 0388D72D24F74A21007BA51E /* PBXTargetDependency */, 334 | ); 335 | name = TodayFlights; 336 | productName = FlightAppTest; 337 | productReference = 03781DDF1DF9825800EF1ABF /* TodayFlights.app */; 338 | productType = "com.apple.product-type.application"; 339 | }; 340 | 0388D71D24F74A21007BA51E /* TodayFlightsWidget */ = { 341 | isa = PBXNativeTarget; 342 | buildConfigurationList = 0388D72F24F74A21007BA51E /* Build configuration list for PBXNativeTarget "TodayFlightsWidget" */; 343 | buildPhases = ( 344 | 0388D71A24F74A21007BA51E /* Sources */, 345 | 0388D71B24F74A21007BA51E /* Frameworks */, 346 | 0388D71C24F74A21007BA51E /* Resources */, 347 | ); 348 | buildRules = ( 349 | ); 350 | dependencies = ( 351 | ); 352 | name = TodayFlightsWidget; 353 | productName = AnotherTodayTest; 354 | productReference = 0388D71E24F74A21007BA51E /* TodayFlightsWidget.appex */; 355 | productType = "com.apple.product-type.app-extension"; 356 | }; 357 | /* End PBXNativeTarget section */ 358 | 359 | /* Begin PBXProject section */ 360 | 03781DD71DF9825800EF1ABF /* Project object */ = { 361 | isa = PBXProject; 362 | attributes = { 363 | LastSwiftUpdateCheck = 0810; 364 | LastUpgradeCheck = 1160; 365 | ORGANIZATIONNAME = "Josh Parnham"; 366 | TargetAttributes = { 367 | 0350634024FA32B900E71269 = { 368 | CreatedOnToolsVersion = 11.6; 369 | DevelopmentTeam = 3C7269R37R; 370 | ProvisioningStyle = Automatic; 371 | TestTargetID = 03781DDE1DF9825800EF1ABF; 372 | }; 373 | 03781DDE1DF9825800EF1ABF = { 374 | CreatedOnToolsVersion = 8.1; 375 | DevelopmentTeam = 3C7269R37R; 376 | LastSwiftMigration = 1020; 377 | ProvisioningStyle = Automatic; 378 | SystemCapabilities = { 379 | com.apple.ApplicationGroups.Mac = { 380 | enabled = 1; 381 | }; 382 | com.apple.Maps.Mac = { 383 | enabled = 1; 384 | }; 385 | com.apple.Sandbox = { 386 | enabled = 1; 387 | }; 388 | }; 389 | }; 390 | 0388D71D24F74A21007BA51E = { 391 | CreatedOnToolsVersion = 11.6; 392 | DevelopmentTeam = 3C7269R37R; 393 | LastSwiftMigration = 1160; 394 | ProvisioningStyle = Automatic; 395 | }; 396 | }; 397 | }; 398 | buildConfigurationList = 03781DDA1DF9825800EF1ABF /* Build configuration list for PBXProject "TodayFlights" */; 399 | compatibilityVersion = "Xcode 3.2"; 400 | developmentRegion = en; 401 | hasScannedForEncodings = 0; 402 | knownRegions = ( 403 | en, 404 | Base, 405 | ); 406 | mainGroup = 03781DD61DF9825800EF1ABF; 407 | productRefGroup = 03781DE01DF9825800EF1ABF /* Products */; 408 | projectDirPath = ""; 409 | projectRoot = ""; 410 | targets = ( 411 | 03781DDE1DF9825800EF1ABF /* TodayFlights */, 412 | 0388D71D24F74A21007BA51E /* TodayFlightsWidget */, 413 | 0350634024FA32B900E71269 /* TodayFlightsTests */, 414 | ); 415 | }; 416 | /* End PBXProject section */ 417 | 418 | /* Begin PBXResourcesBuildPhase section */ 419 | 0350633F24FA32B900E71269 /* Resources */ = { 420 | isa = PBXResourcesBuildPhase; 421 | buildActionMask = 2147483647; 422 | files = ( 423 | ); 424 | runOnlyForDeploymentPostprocessing = 0; 425 | }; 426 | 03781DDD1DF9825800EF1ABF /* Resources */ = { 427 | isa = PBXResourcesBuildPhase; 428 | buildActionMask = 2147483647; 429 | files = ( 430 | 038F090D1E4AAF000027BE91 /* Assets.xcassets in Resources */, 431 | 038F09021E4AAAAE0027BE91 /* MainMenu.xib in Resources */, 432 | 0350634F24FA32DC00E71269 /* Info.plist in Resources */, 433 | ); 434 | runOnlyForDeploymentPostprocessing = 0; 435 | }; 436 | 0388D71C24F74A21007BA51E /* Resources */ = { 437 | isa = PBXResourcesBuildPhase; 438 | buildActionMask = 2147483647; 439 | files = ( 440 | 0351E14024F9FF2900E9976F /* TodayViewController.xib in Resources */, 441 | 0351E13524F9FCF800E9976F /* EditFlightViewController.xib in Resources */, 442 | 0351E13224F9FCF800E9976F /* FirstRunViewController.xib in Resources */, 443 | 0351E15724FA08B100E9976F /* InfoPlist.strings in Resources */, 444 | ); 445 | runOnlyForDeploymentPostprocessing = 0; 446 | }; 447 | /* End PBXResourcesBuildPhase section */ 448 | 449 | /* Begin PBXShellScriptBuildPhase section */ 450 | 0308B3252508F6E50090D507 /* ShellScript */ = { 451 | isa = PBXShellScriptBuildPhase; 452 | buildActionMask = 2147483647; 453 | files = ( 454 | ); 455 | inputFileListPaths = ( 456 | ); 457 | inputPaths = ( 458 | ); 459 | outputFileListPaths = ( 460 | ); 461 | outputPaths = ( 462 | ); 463 | runOnlyForDeploymentPostprocessing = 0; 464 | shellPath = /bin/sh; 465 | shellScript = "codesign --verbose --force --deep -o runtime \\\n--sign \"${EXPANDED_CODE_SIGN_IDENTITY_NAME}\" \\\n\"${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/AutoUpdate.app\"\n"; 466 | }; 467 | /* End PBXShellScriptBuildPhase section */ 468 | 469 | /* Begin PBXSourcesBuildPhase section */ 470 | 0350633D24FA32B900E71269 /* Sources */ = { 471 | isa = PBXSourcesBuildPhase; 472 | buildActionMask = 2147483647; 473 | files = ( 474 | 0350635024FA32F000E71269 /* TodayFlightsTests.m in Sources */, 475 | ); 476 | runOnlyForDeploymentPostprocessing = 0; 477 | }; 478 | 03781DDB1DF9825800EF1ABF /* Sources */ = { 479 | isa = PBXSourcesBuildPhase; 480 | buildActionMask = 2147483647; 481 | files = ( 482 | 038F08D01E4AAA8E0027BE91 /* AppDelegate.swift in Sources */, 483 | 034A7A941E4D33DE00619BFF /* AddFlightViewController.swift in Sources */, 484 | 0351E15E24FA275700E9976F /* DemoWindowController.swift in Sources */, 485 | 034A7A921E4D31F700619BFF /* UserDefaults+AppGroup.swift in Sources */, 486 | ); 487 | runOnlyForDeploymentPostprocessing = 0; 488 | }; 489 | 0388D71A24F74A21007BA51E /* Sources */ = { 490 | isa = PBXSourcesBuildPhase; 491 | buildActionMask = 2147483647; 492 | files = ( 493 | 0351E13624F9FCF800E9976F /* EditFlightViewController.m in Sources */, 494 | 0351E13324F9FCF800E9976F /* TodayViewController.m in Sources */, 495 | 0351E13424F9FCF800E9976F /* FirstRunViewController.m in Sources */, 496 | ); 497 | runOnlyForDeploymentPostprocessing = 0; 498 | }; 499 | /* End PBXSourcesBuildPhase section */ 500 | 501 | /* Begin PBXTargetDependency section */ 502 | 0350634724FA32B900E71269 /* PBXTargetDependency */ = { 503 | isa = PBXTargetDependency; 504 | target = 03781DDE1DF9825800EF1ABF /* TodayFlights */; 505 | targetProxy = 0350634624FA32B900E71269 /* PBXContainerItemProxy */; 506 | }; 507 | 0388D72D24F74A21007BA51E /* PBXTargetDependency */ = { 508 | isa = PBXTargetDependency; 509 | target = 0388D71D24F74A21007BA51E /* TodayFlightsWidget */; 510 | targetProxy = 0388D72C24F74A21007BA51E /* PBXContainerItemProxy */; 511 | }; 512 | /* End PBXTargetDependency section */ 513 | 514 | /* Begin PBXVariantGroup section */ 515 | 0351E13E24F9FF2900E9976F /* TodayViewController.xib */ = { 516 | isa = PBXVariantGroup; 517 | children = ( 518 | 0351E13F24F9FF2900E9976F /* Base */, 519 | ); 520 | name = TodayViewController.xib; 521 | sourceTree = ""; 522 | }; 523 | 0351E15524FA08B100E9976F /* InfoPlist.strings */ = { 524 | isa = PBXVariantGroup; 525 | children = ( 526 | 0351E15624FA08B100E9976F /* en */, 527 | ); 528 | name = InfoPlist.strings; 529 | sourceTree = ""; 530 | }; 531 | 038F09001E4AAAAE0027BE91 /* MainMenu.xib */ = { 532 | isa = PBXVariantGroup; 533 | children = ( 534 | 038F09011E4AAAAE0027BE91 /* Base */, 535 | ); 536 | name = MainMenu.xib; 537 | sourceTree = ""; 538 | }; 539 | /* End PBXVariantGroup section */ 540 | 541 | /* Begin XCBuildConfiguration section */ 542 | 0350634924FA32B900E71269 /* Debug */ = { 543 | isa = XCBuildConfiguration; 544 | buildSettings = { 545 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 546 | BUNDLE_LOADER = "$(TEST_HOST)"; 547 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 548 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 549 | CLANG_ENABLE_OBJC_WEAK = YES; 550 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 551 | CODE_SIGN_IDENTITY = "Apple Development"; 552 | CODE_SIGN_STYLE = Automatic; 553 | COMBINE_HIDPI_IMAGES = YES; 554 | DEVELOPMENT_TEAM = 3C7269R37R; 555 | GCC_C_LANGUAGE_STANDARD = gnu11; 556 | INFOPLIST_FILE = TodayFlightsTests/Info.plist; 557 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 558 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 559 | MTL_FAST_MATH = YES; 560 | PRODUCT_BUNDLE_IDENTIFIER = com.joshparnham.TodayFlightsTests; 561 | PRODUCT_NAME = "$(TARGET_NAME)"; 562 | SYSTEM_FRAMEWORK_SEARCH_PATHS = "$(inherited) $(SYSTEM_LIBRARY_DIR)/PrivateFrameworks"; 563 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TodayFlights.app/Contents/MacOS/TodayFlights"; 564 | }; 565 | name = Debug; 566 | }; 567 | 0350634A24FA32B900E71269 /* Release */ = { 568 | isa = XCBuildConfiguration; 569 | buildSettings = { 570 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 571 | BUNDLE_LOADER = "$(TEST_HOST)"; 572 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 573 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 574 | CLANG_ENABLE_OBJC_WEAK = YES; 575 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 576 | CODE_SIGN_IDENTITY = "Apple Development"; 577 | CODE_SIGN_STYLE = Automatic; 578 | COMBINE_HIDPI_IMAGES = YES; 579 | DEVELOPMENT_TEAM = 3C7269R37R; 580 | GCC_C_LANGUAGE_STANDARD = gnu11; 581 | INFOPLIST_FILE = TodayFlightsTests/Info.plist; 582 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 583 | MTL_FAST_MATH = YES; 584 | PRODUCT_BUNDLE_IDENTIFIER = com.joshparnham.TodayFlightsTests; 585 | PRODUCT_NAME = "$(TARGET_NAME)"; 586 | SYSTEM_FRAMEWORK_SEARCH_PATHS = "$(inherited) $(SYSTEM_LIBRARY_DIR)/PrivateFrameworks"; 587 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TodayFlights.app/Contents/MacOS/TodayFlights"; 588 | }; 589 | name = Release; 590 | }; 591 | 03781DEA1DF9825800EF1ABF /* Debug */ = { 592 | isa = XCBuildConfiguration; 593 | buildSettings = { 594 | ALWAYS_SEARCH_USER_PATHS = NO; 595 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 596 | CLANG_ANALYZER_NONNULL = YES; 597 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 598 | CLANG_CXX_LIBRARY = "libc++"; 599 | CLANG_ENABLE_MODULES = YES; 600 | CLANG_ENABLE_OBJC_ARC = YES; 601 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 602 | CLANG_WARN_BOOL_CONVERSION = YES; 603 | CLANG_WARN_COMMA = YES; 604 | CLANG_WARN_CONSTANT_CONVERSION = YES; 605 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 606 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 607 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 608 | CLANG_WARN_EMPTY_BODY = YES; 609 | CLANG_WARN_ENUM_CONVERSION = YES; 610 | CLANG_WARN_INFINITE_RECURSION = YES; 611 | CLANG_WARN_INT_CONVERSION = YES; 612 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 613 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 614 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 615 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 616 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 617 | CLANG_WARN_STRICT_PROTOTYPES = YES; 618 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 619 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 620 | CLANG_WARN_UNREACHABLE_CODE = YES; 621 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 622 | CODE_SIGN_ENTITLEMENTS = ""; 623 | CODE_SIGN_IDENTITY = "-"; 624 | COPY_PHASE_STRIP = NO; 625 | DEBUG_INFORMATION_FORMAT = dwarf; 626 | ENABLE_STRICT_OBJC_MSGSEND = YES; 627 | ENABLE_TESTABILITY = YES; 628 | GCC_C_LANGUAGE_STANDARD = gnu99; 629 | GCC_DYNAMIC_NO_PIC = NO; 630 | GCC_NO_COMMON_BLOCKS = YES; 631 | GCC_OPTIMIZATION_LEVEL = 0; 632 | GCC_PREPROCESSOR_DEFINITIONS = ( 633 | "DEBUG=1", 634 | "$(inherited)", 635 | ); 636 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 637 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 638 | GCC_WARN_UNDECLARED_SELECTOR = YES; 639 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 640 | GCC_WARN_UNUSED_FUNCTION = YES; 641 | GCC_WARN_UNUSED_VARIABLE = YES; 642 | MACOSX_DEPLOYMENT_TARGET = 10.15; 643 | MTL_ENABLE_DEBUG_INFO = YES; 644 | ONLY_ACTIVE_ARCH = YES; 645 | SDKROOT = macosx; 646 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 647 | SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/TodayFlights/PrivateHeaders/FlightUtilities/FUFlightViewController.h"; 648 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 649 | }; 650 | name = Debug; 651 | }; 652 | 03781DEB1DF9825800EF1ABF /* Release */ = { 653 | isa = XCBuildConfiguration; 654 | buildSettings = { 655 | ALWAYS_SEARCH_USER_PATHS = NO; 656 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 657 | CLANG_ANALYZER_NONNULL = YES; 658 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 659 | CLANG_CXX_LIBRARY = "libc++"; 660 | CLANG_ENABLE_MODULES = YES; 661 | CLANG_ENABLE_OBJC_ARC = YES; 662 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 663 | CLANG_WARN_BOOL_CONVERSION = YES; 664 | CLANG_WARN_COMMA = YES; 665 | CLANG_WARN_CONSTANT_CONVERSION = YES; 666 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 667 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 668 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 669 | CLANG_WARN_EMPTY_BODY = YES; 670 | CLANG_WARN_ENUM_CONVERSION = YES; 671 | CLANG_WARN_INFINITE_RECURSION = YES; 672 | CLANG_WARN_INT_CONVERSION = YES; 673 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 674 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 675 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 676 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 677 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 678 | CLANG_WARN_STRICT_PROTOTYPES = YES; 679 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 680 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 681 | CLANG_WARN_UNREACHABLE_CODE = YES; 682 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 683 | CODE_SIGN_ENTITLEMENTS = ""; 684 | CODE_SIGN_IDENTITY = "-"; 685 | COPY_PHASE_STRIP = NO; 686 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 687 | ENABLE_NS_ASSERTIONS = NO; 688 | ENABLE_STRICT_OBJC_MSGSEND = YES; 689 | GCC_C_LANGUAGE_STANDARD = gnu99; 690 | GCC_NO_COMMON_BLOCKS = YES; 691 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 692 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 693 | GCC_WARN_UNDECLARED_SELECTOR = YES; 694 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 695 | GCC_WARN_UNUSED_FUNCTION = YES; 696 | GCC_WARN_UNUSED_VARIABLE = YES; 697 | MACOSX_DEPLOYMENT_TARGET = 10.15; 698 | MTL_ENABLE_DEBUG_INFO = NO; 699 | SDKROOT = macosx; 700 | SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/TodayFlights/PrivateHeaders/FlightUtilities/FUFlightViewController.h"; 701 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 702 | }; 703 | name = Release; 704 | }; 705 | 03781DED1DF9825800EF1ABF /* Debug */ = { 706 | isa = XCBuildConfiguration; 707 | buildSettings = { 708 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 709 | CLANG_ENABLE_MODULES = YES; 710 | CODE_SIGN_ENTITLEMENTS = TodayFlights/TodayFlights.entitlements; 711 | CODE_SIGN_IDENTITY = "Mac Developer"; 712 | COMBINE_HIDPI_IMAGES = YES; 713 | CURRENT_PROJECT_VERSION = 2.1; 714 | DEVELOPMENT_TEAM = 3C7269R37R; 715 | ENABLE_HARDENED_RUNTIME = YES; 716 | FRAMEWORK_SEARCH_PATHS = ( 717 | "$(inherited)", 718 | "$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks", 719 | "$(PROJECT_DIR)", 720 | "$(PROJECT_DIR)/Carthage/Build/Mac", 721 | ); 722 | INFOPLIST_FILE = TodayFlights/Info.plist; 723 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 724 | MARKETING_VERSION = 2.1; 725 | PRODUCT_BUNDLE_IDENTIFIER = com.joshparnham.TodayFlights; 726 | PRODUCT_NAME = "$(TARGET_NAME)"; 727 | SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/TodayFlights/PrivateHeaders/FlightUtilities/FUFlightViewController.h"; 728 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 729 | SWIFT_VERSION = 5.0; 730 | }; 731 | name = Debug; 732 | }; 733 | 03781DEE1DF9825800EF1ABF /* Release */ = { 734 | isa = XCBuildConfiguration; 735 | buildSettings = { 736 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 737 | CLANG_ENABLE_MODULES = YES; 738 | CODE_SIGN_ENTITLEMENTS = TodayFlights/TodayFlights.entitlements; 739 | CODE_SIGN_IDENTITY = "Mac Developer"; 740 | COMBINE_HIDPI_IMAGES = YES; 741 | CURRENT_PROJECT_VERSION = 2.1; 742 | DEVELOPMENT_TEAM = 3C7269R37R; 743 | ENABLE_HARDENED_RUNTIME = YES; 744 | FRAMEWORK_SEARCH_PATHS = ( 745 | "$(inherited)", 746 | "$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks", 747 | "$(PROJECT_DIR)", 748 | "$(PROJECT_DIR)/Carthage/Build/Mac", 749 | ); 750 | INFOPLIST_FILE = TodayFlights/Info.plist; 751 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 752 | MARKETING_VERSION = 2.1; 753 | PRODUCT_BUNDLE_IDENTIFIER = com.joshparnham.TodayFlights; 754 | PRODUCT_NAME = "$(TARGET_NAME)"; 755 | SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/TodayFlights/PrivateHeaders/FlightUtilities/FUFlightViewController.h"; 756 | SWIFT_VERSION = 5.0; 757 | }; 758 | name = Release; 759 | }; 760 | 0388D73024F74A21007BA51E /* Debug */ = { 761 | isa = XCBuildConfiguration; 762 | buildSettings = { 763 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 764 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 765 | CLANG_ENABLE_MODULES = YES; 766 | CLANG_ENABLE_OBJC_WEAK = YES; 767 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 768 | CODE_SIGN_ENTITLEMENTS = TodayFlightsWidget/TodayFlightsWidget.entitlements; 769 | CODE_SIGN_IDENTITY = "Mac Developer"; 770 | CODE_SIGN_STYLE = Automatic; 771 | COMBINE_HIDPI_IMAGES = YES; 772 | CURRENT_PROJECT_VERSION = 2.1; 773 | DEVELOPMENT_TEAM = 3C7269R37R; 774 | ENABLE_HARDENED_RUNTIME = YES; 775 | GCC_C_LANGUAGE_STANDARD = gnu11; 776 | INFOPLIST_EXPAND_BUILD_SETTINGS = YES; 777 | INFOPLIST_FILE = TodayFlightsWidget/Info.plist; 778 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @executable_path/../../../../Frameworks"; 779 | MARKETING_VERSION = 2.1; 780 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 781 | MTL_FAST_MATH = YES; 782 | PRODUCT_BUNDLE_IDENTIFIER = com.joshparnham.TodayFlights.Widget; 783 | PRODUCT_NAME = "$(TARGET_NAME)"; 784 | SKIP_INSTALL = YES; 785 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 786 | SWIFT_VERSION = 5.0; 787 | SYSTEM_FRAMEWORK_SEARCH_PATHS = "$(inherited) $(SYSTEM_LIBRARY_DIR)/PrivateFrameworks"; 788 | }; 789 | name = Debug; 790 | }; 791 | 0388D73124F74A21007BA51E /* Release */ = { 792 | isa = XCBuildConfiguration; 793 | buildSettings = { 794 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 795 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 796 | CLANG_ENABLE_MODULES = YES; 797 | CLANG_ENABLE_OBJC_WEAK = YES; 798 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 799 | CODE_SIGN_ENTITLEMENTS = TodayFlightsWidget/TodayFlightsWidget.entitlements; 800 | CODE_SIGN_IDENTITY = "Mac Developer"; 801 | CODE_SIGN_STYLE = Automatic; 802 | COMBINE_HIDPI_IMAGES = YES; 803 | CURRENT_PROJECT_VERSION = 2.1; 804 | DEVELOPMENT_TEAM = 3C7269R37R; 805 | ENABLE_HARDENED_RUNTIME = YES; 806 | GCC_C_LANGUAGE_STANDARD = gnu11; 807 | INFOPLIST_EXPAND_BUILD_SETTINGS = YES; 808 | INFOPLIST_FILE = TodayFlightsWidget/Info.plist; 809 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @executable_path/../../../../Frameworks"; 810 | MARKETING_VERSION = 2.1; 811 | MTL_FAST_MATH = YES; 812 | PRODUCT_BUNDLE_IDENTIFIER = com.joshparnham.TodayFlights.Widget; 813 | PRODUCT_NAME = "$(TARGET_NAME)"; 814 | SKIP_INSTALL = YES; 815 | SWIFT_VERSION = 5.0; 816 | SYSTEM_FRAMEWORK_SEARCH_PATHS = "$(inherited) $(SYSTEM_LIBRARY_DIR)/PrivateFrameworks"; 817 | }; 818 | name = Release; 819 | }; 820 | /* End XCBuildConfiguration section */ 821 | 822 | /* Begin XCConfigurationList section */ 823 | 0350634824FA32B900E71269 /* Build configuration list for PBXNativeTarget "TodayFlightsTests" */ = { 824 | isa = XCConfigurationList; 825 | buildConfigurations = ( 826 | 0350634924FA32B900E71269 /* Debug */, 827 | 0350634A24FA32B900E71269 /* Release */, 828 | ); 829 | defaultConfigurationIsVisible = 0; 830 | defaultConfigurationName = Release; 831 | }; 832 | 03781DDA1DF9825800EF1ABF /* Build configuration list for PBXProject "TodayFlights" */ = { 833 | isa = XCConfigurationList; 834 | buildConfigurations = ( 835 | 03781DEA1DF9825800EF1ABF /* Debug */, 836 | 03781DEB1DF9825800EF1ABF /* Release */, 837 | ); 838 | defaultConfigurationIsVisible = 0; 839 | defaultConfigurationName = Release; 840 | }; 841 | 03781DEC1DF9825800EF1ABF /* Build configuration list for PBXNativeTarget "TodayFlights" */ = { 842 | isa = XCConfigurationList; 843 | buildConfigurations = ( 844 | 03781DED1DF9825800EF1ABF /* Debug */, 845 | 03781DEE1DF9825800EF1ABF /* Release */, 846 | ); 847 | defaultConfigurationIsVisible = 0; 848 | defaultConfigurationName = Release; 849 | }; 850 | 0388D72F24F74A21007BA51E /* Build configuration list for PBXNativeTarget "TodayFlightsWidget" */ = { 851 | isa = XCConfigurationList; 852 | buildConfigurations = ( 853 | 0388D73024F74A21007BA51E /* Debug */, 854 | 0388D73124F74A21007BA51E /* Release */, 855 | ); 856 | defaultConfigurationIsVisible = 0; 857 | defaultConfigurationName = Release; 858 | }; 859 | /* End XCConfigurationList section */ 860 | }; 861 | rootObject = 03781DD71DF9825800EF1ABF /* Project object */; 862 | } 863 | --------------------------------------------------------------------------------