├── CatalystToolbarMenuButton
├── Assets.xcassets
│ ├── Contents.json
│ └── AppIcon.appiconset
│ │ ├── icon-120.png
│ │ ├── icon-152.png
│ │ ├── icon-167.png
│ │ ├── icon-180.png
│ │ ├── icon-29.png
│ │ ├── icon-40.png
│ │ ├── icon-58.png
│ │ ├── icon-60.png
│ │ ├── icon-76.png
│ │ ├── icon-80.png
│ │ ├── icon-87.png
│ │ ├── icon20.png
│ │ ├── icon-1024.png
│ │ └── Contents.json
├── Localizable.strings
├── Source
│ ├── Main
│ │ └── CTMBMainViewController.swift
│ ├── NSObject+AppKitGlue.swift
│ └── Application
│ │ ├── CTMBAppDelegate+Actions.swift
│ │ ├── CTMBSceneDelegate.swift
│ │ ├── CTMBSceneDelegate+NSToolbar.swift
│ │ └── CTMBAppDelegate.swift
├── Info.plist
└── Base.lproj
│ └── LaunchScreen.storyboard
├── CatalystToolbarMenuButton.xcodeproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
└── project.pbxproj
├── README.md
└── AppKitIntegration
├── AppKitIntegration.h
└── AppKitController.swift
/CatalystToolbarMenuButton/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steventroughtonsmith/CatalystToolbarMenuButton/HEAD/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-120.png
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steventroughtonsmith/CatalystToolbarMenuButton/HEAD/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-152.png
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steventroughtonsmith/CatalystToolbarMenuButton/HEAD/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-167.png
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steventroughtonsmith/CatalystToolbarMenuButton/HEAD/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-180.png
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steventroughtonsmith/CatalystToolbarMenuButton/HEAD/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-29.png
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steventroughtonsmith/CatalystToolbarMenuButton/HEAD/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-40.png
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steventroughtonsmith/CatalystToolbarMenuButton/HEAD/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-58.png
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steventroughtonsmith/CatalystToolbarMenuButton/HEAD/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-60.png
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steventroughtonsmith/CatalystToolbarMenuButton/HEAD/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-76.png
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steventroughtonsmith/CatalystToolbarMenuButton/HEAD/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-80.png
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steventroughtonsmith/CatalystToolbarMenuButton/HEAD/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-87.png
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steventroughtonsmith/CatalystToolbarMenuButton/HEAD/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon20.png
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/steventroughtonsmith/CatalystToolbarMenuButton/HEAD/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/icon-1024.png
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Localizable.strings:
--------------------------------------------------------------------------------
1 | /*
2 | Localizable.strings
3 | CatalystToolbarMenuButton
4 |
5 | Created by Steven Troughton-Smith on 09/04/2022.
6 |
7 | */
8 |
9 | "TAKE_PHOTO" = "Take Photo";
10 | "CHOOSE_FROM_LIBRARY" = "Choose from Library…";
11 | "CHOOSE_FROM_FILE" = "Choose File…";
12 |
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Source/Main/CTMBMainViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CTMBMainViewController.swift
3 | // CatalystToolbarMenuButton
4 | //
5 | // Created by Steven Troughton-Smith on 09/04/2022.
6 | //
7 | //
8 |
9 | import UIKit
10 |
11 | final class CTMBMainViewController: UIViewController {
12 |
13 | init() {
14 | super.init(nibName: nil, bundle: nil)
15 | title = "CatalystToolbarMenuButton"
16 | }
17 |
18 | required init?(coder aDecoder: NSCoder) {
19 | fatalError("init(coder:) has not been implemented")
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Source/NSObject+AppKitGlue.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NSObject+AppKitGlue.swift
3 | // CatalystToolbarMenuButton
4 | //
5 | // Created by Steven Troughton-Smith on 09/04/2022.
6 | //
7 |
8 | import UIKit
9 |
10 | #if targetEnvironment(macCatalyst)
11 | import AppKit
12 |
13 | extension NSObject {
14 | @objc public func _marzipan_setupWindow(_ sender:Any) {
15 |
16 | }
17 |
18 | @objc public func createAddToolbarItem(itemIdentifier:NSToolbarItem.Identifier) -> NSToolbarItem {
19 | return NSToolbarItem(itemIdentifier: itemIdentifier)
20 |
21 | }
22 | }
23 | #endif
24 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # CatalystToolbarMenuButton
2 |
3 | This is a simple Mac Catalyst example showcasing how to build a dropdown menu toolbar button using AppKit.
4 |
5 | There are ways to build this using NSToolbarItemGroup, but it has peculiarities like the button always being the width of the longest menu item, even when no title is shown. This way, instead, gives you an NSPopUpButton for your toolbar item, and lets you set an NSMenu of your own design to it.
6 |
7 | ### Screenshot
8 |
9 | 
10 |
--------------------------------------------------------------------------------
/AppKitIntegration/AppKitIntegration.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppKitIntegration.h
3 | // AppKitIntegration
4 | //
5 | // Created by Steven Troughton-Smith on 09/04/2022.
6 | //
7 |
8 | #import
9 |
10 | //! Project version number for AppKitIntegration.
11 | FOUNDATION_EXPORT double AppKitIntegrationVersionNumber;
12 |
13 | //! Project version string for AppKitIntegration.
14 | FOUNDATION_EXPORT const unsigned char AppKitIntegrationVersionString[];
15 |
16 | // In this header, you should import all the public headers of your framework using statements like #import
17 |
18 |
19 |
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Source/Application/CTMBAppDelegate+Actions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CTMBAppDelegate.swift
3 | // CatalystToolbarMenuButton
4 | //
5 | // Created by Steven Troughton-Smith on 09/04/2022.
6 | //
7 | //
8 |
9 | import UIKit
10 |
11 | extension CTMBAppDelegate {
12 |
13 | // MARK: - Actions
14 |
15 | @objc func addNewPhoto(_ sender:Any?) {
16 |
17 | }
18 |
19 | @objc func addExistingPhoto(_ sender:Any?) {
20 |
21 | }
22 |
23 | @objc func addFromFile(_ sender:Any?) {
24 |
25 | }
26 |
27 | // MARK: - Dynamic Options
28 |
29 | /*
30 | Demonstrating unavailable selector.
31 | Use responds(to:) to change availability of menu items at runtime
32 | */
33 | override func responds(to aSelector: Selector!) -> Bool {
34 | if aSelector == NSSelectorFromString("addFromFile:") {
35 | return false
36 | }
37 |
38 | return super.responds(to: aSelector)
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Source/Application/CTMBSceneDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CTMBSceneDelegate.swift
3 | // CatalystToolbarMenuButton
4 | //
5 | // Created by Steven Troughton-Smith on 09/04/2022.
6 | //
7 | //
8 |
9 | import UIKit
10 |
11 | class CTMBSceneDelegate: UIResponder, UIWindowSceneDelegate {
12 | var window: UIWindow?
13 |
14 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
15 | guard let windowScene = scene as? UIWindowScene else {
16 | fatalError("Expected scene of type UIWindowScene but got an unexpected type")
17 | }
18 | window = UIWindow(windowScene: windowScene)
19 |
20 | if let window = window {
21 | window.rootViewController = CTMBMainViewController()
22 |
23 | #if targetEnvironment(macCatalyst)
24 |
25 | let toolbar = NSToolbar(identifier: NSToolbar.Identifier("CTMBSceneDelegate.Toolbar"))
26 | toolbar.delegate = self
27 | toolbar.displayMode = .iconOnly
28 | toolbar.allowsUserCustomization = false
29 |
30 | windowScene.titlebar?.toolbar = toolbar
31 | windowScene.titlebar?.toolbarStyle = .unified
32 |
33 | #endif
34 |
35 | window.makeKeyAndVisible()
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Source/Application/CTMBSceneDelegate+NSToolbar.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CTMBSceneDelegate+NSToolbar.swift
3 | // CatalystToolbarMenuButton
4 | //
5 | // Created by Steven Troughton-Smith on 09/04/2022.
6 | //
7 | //
8 |
9 | import UIKit
10 |
11 | #if targetEnvironment(macCatalyst)
12 | import AppKit
13 |
14 | extension NSToolbarItem.Identifier {
15 | static let new = NSToolbarItem.Identifier("com.highcaffeinecontent.toolbar.new")
16 | }
17 |
18 | extension CTMBSceneDelegate: NSToolbarDelegate {
19 |
20 | func toolbarItems() -> [NSToolbarItem.Identifier] {
21 | return [.toggleSidebar, .flexibleSpace, .new]
22 | }
23 |
24 | func toolbarAllowedItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
25 | return toolbarItems()
26 | }
27 |
28 | func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
29 | return toolbarItems()
30 | }
31 |
32 | func toolbar(_ toolbar: NSToolbar, itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier, willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem? {
33 | if itemIdentifier == .new {
34 | if let newItem = CTMBAppDelegate.appKitController?.createAddToolbarItem(itemIdentifier: itemIdentifier) {
35 | return newItem
36 | }
37 | else {
38 | return NSToolbarItem(itemIdentifier: itemIdentifier)
39 | }
40 | }
41 |
42 | return NSToolbarItem(itemIdentifier: itemIdentifier)
43 | }
44 | }
45 | #endif
46 |
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Source/Application/CTMBAppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CTMBAppDelegate.swift
3 | // CatalystToolbarMenuButton
4 | //
5 | // Created by Steven Troughton-Smith on 09/04/2022.
6 | //
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class CTMBAppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | // MARK: - AppKit Bundle Loading
15 |
16 | #if targetEnvironment(macCatalyst)
17 | static var appKitController:NSObject?
18 |
19 | class func loadAppKitIntegrationFramework() {
20 |
21 | if let frameworksPath = Bundle.main.privateFrameworksPath {
22 | let bundlePath = "\(frameworksPath)/AppKitIntegration.framework"
23 | do {
24 | try Bundle(path: bundlePath)?.loadAndReturnError()
25 |
26 | let bundle = Bundle(path: bundlePath)!
27 | NSLog("[APPKIT BUNDLE] Loaded Successfully")
28 |
29 | if let appKitControllerClass = bundle.principalClass as? NSObject.Type {
30 | appKitController = appKitControllerClass.init()
31 |
32 | NotificationCenter.default.addObserver(appKitController as Any, selector: #selector(_marzipan_setupWindow(_:)), name: NSNotification.Name("UISBHSDidCreateWindowForSceneNotification"), object: nil)
33 | }
34 | }
35 | catch {
36 | NSLog("[APPKIT BUNDLE] Error loading: \(error)")
37 | }
38 | }
39 | }
40 | #endif
41 |
42 | // MARK: -
43 |
44 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
45 | #if targetEnvironment(macCatalyst)
46 | CTMBAppDelegate.loadAppKitIntegrationFramework()
47 | #endif
48 |
49 | return true
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ITSAppUsesNonExemptEncryption
6 |
7 | LSRequiresIPhoneOS
8 |
9 | UIApplicationSceneManifest
10 |
11 | UIApplicationSupportsMultipleScenes
12 |
13 | UISceneConfigurations
14 |
15 | UIWindowSceneSessionRoleApplication
16 |
17 |
18 | UISceneConfigurationName
19 | Default Configuration
20 | UISceneDelegateClassName
21 | $(PRODUCT_MODULE_NAME).CTMBSceneDelegate
22 |
23 |
24 |
25 |
26 | UIApplicationSupportsIndirectInputEvents
27 |
28 | UILaunchStoryboardName
29 | LaunchScreen
30 | UIRequiredDeviceCapabilities
31 |
32 | armv7
33 |
34 | UISupportedInterfaceOrientations
35 |
36 | UIInterfaceOrientationPortrait
37 | UIInterfaceOrientationLandscapeLeft
38 | UIInterfaceOrientationLandscapeRight
39 |
40 | UISupportedInterfaceOrientations~ipad
41 |
42 | UIInterfaceOrientationPortrait
43 | UIInterfaceOrientationPortraitUpsideDown
44 | UIInterfaceOrientationLandscapeLeft
45 | UIInterfaceOrientationLandscapeRight
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/AppKitIntegration/AppKitController.swift:
--------------------------------------------------------------------------------
1 | /*
2 | 2021 Steven Troughton-Smith (@stroughtonsmith)
3 | Provided as sample code to do with as you wish.
4 | No license or attribution required.
5 | */
6 |
7 | import AppKit
8 |
9 | extension NSObject {
10 | @objc func hostWindowForSceneIdentifier(_ identifier:String) -> NSWindow? {
11 | return nil
12 | }
13 | }
14 |
15 | class AppKitController : NSObject {
16 |
17 | @objc var uiAppDelegate:NSObject? = nil
18 |
19 | // MARK: -
20 |
21 | @objc public func _marzipan_setupWindow(_ note:Notification) {
22 |
23 | NSLog("_marzipan_setupWindow: \(String(describing: note.userInfo))")
24 |
25 | /*
26 | Here, AppKit has generated the host window for your UIKit window.
27 | Now it is safe to go do any AppKit-y things you'd like to do to it
28 | */
29 | }
30 | }
31 |
32 | extension AppKitController {
33 |
34 | @objc public func createAddToolbarItem(itemIdentifier:NSToolbarItem.Identifier) -> NSToolbarItem {
35 | let item = NSToolbarItem(itemIdentifier: itemIdentifier)
36 |
37 | let menuButton = NSPopUpButton()
38 |
39 | menuButton.pullsDown = true
40 | menuButton.bezelStyle = .texturedRounded
41 |
42 | let menu = NSMenu()
43 |
44 | let rootItem = NSMenuItem(title: "", action: nil, keyEquivalent: "")
45 | rootItem.image = NSImage(systemSymbolName: "plus", accessibilityDescription: "")!
46 |
47 | menu.items.append(rootItem)
48 |
49 | do {
50 | let item = NSMenuItem(title: NSLocalizedString("TAKE_PHOTO", comment: ""), action: NSSelectorFromString("addNewPhoto:"), keyEquivalent: "")
51 | item.target = uiAppDelegate
52 | menu.items.append(item)
53 | }
54 |
55 | menu.items.append(.separator())
56 |
57 | do {
58 | let item = NSMenuItem(title: NSLocalizedString("CHOOSE_FROM_LIBRARY", comment: ""), action: NSSelectorFromString("addExistingPhoto:"), keyEquivalent: "")
59 | item.target = uiAppDelegate
60 | menu.items.append(item)
61 | }
62 |
63 | do {
64 | let item = NSMenuItem(title: NSLocalizedString("CHOOSE_FROM_FILE", comment: ""), action: NSSelectorFromString("addFromFile:"), keyEquivalent: "")
65 | item.target = uiAppDelegate
66 | menu.items.append(item)
67 | }
68 |
69 | menuButton.menu = menu
70 |
71 | item.view = menuButton
72 |
73 | return item
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [
3 | {
4 | "size": "20x20",
5 | "idiom": "iphone",
6 | "filename": "icon-40.png",
7 | "scale": "2x"
8 | },
9 | {
10 | "size": "20x20",
11 | "idiom": "iphone",
12 | "filename": "icon-60.png",
13 | "scale": "3x"
14 | },
15 | {
16 | "size": "29x29",
17 | "idiom": "iphone",
18 | "filename": "icon-58.png",
19 | "scale": "2x"
20 | },
21 | {
22 | "size": "29x29",
23 | "idiom": "iphone",
24 | "filename": "icon-87.png",
25 | "scale": "3x"
26 | },
27 | {
28 | "size": "40x40",
29 | "idiom": "iphone",
30 | "filename": "icon-80.png",
31 | "scale": "2x"
32 | },
33 | {
34 | "size": "40x40",
35 | "idiom": "iphone",
36 | "filename": "icon-120.png",
37 | "scale": "3x"
38 | },
39 | {
40 | "size": "60x60",
41 | "idiom": "iphone",
42 | "filename": "icon-120.png",
43 | "scale": "2x"
44 | },
45 | {
46 | "size": "60x60",
47 | "idiom": "iphone",
48 | "filename": "icon-180.png",
49 | "scale": "3x"
50 | },
51 | {
52 | "size": "20x20",
53 | "idiom": "ipad",
54 | "filename": "icon20.png",
55 | "scale": "1x"
56 | },
57 | {
58 | "size": "20x20",
59 | "idiom": "ipad",
60 | "filename": "icon-40.png",
61 | "scale": "2x"
62 | },
63 | {
64 | "size": "29x29",
65 | "idiom": "ipad",
66 | "filename": "icon-29.png",
67 | "scale": "1x"
68 | },
69 | {
70 | "size": "29x29",
71 | "idiom": "ipad",
72 | "filename": "icon-58.png",
73 | "scale": "2x"
74 | },
75 | {
76 | "size": "40x40",
77 | "idiom": "ipad",
78 | "filename": "icon-40.png",
79 | "scale": "1x"
80 | },
81 | {
82 | "size": "40x40",
83 | "idiom": "ipad",
84 | "filename": "icon-80.png",
85 | "scale": "2x"
86 | },
87 | {
88 | "size": "76x76",
89 | "idiom": "ipad",
90 | "filename": "icon-76.png",
91 | "scale": "1x"
92 | },
93 | {
94 | "size": "76x76",
95 | "idiom": "ipad",
96 | "filename": "icon-152.png",
97 | "scale": "2x"
98 | },
99 | {
100 | "size": "83.5x83.5",
101 | "idiom": "ipad",
102 | "filename": "icon-167.png",
103 | "scale": "2x"
104 | },
105 | {
106 | "size": "1024x1024",
107 | "idiom": "ios-marketing",
108 | "filename": "icon-1024.png",
109 | "scale": "1x"
110 | }
111 | ],
112 | "info": {
113 | "version": 1,
114 | "author": "xcode"
115 | }
116 | }
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/CatalystToolbarMenuButton.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 55;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | B010F4E62801EB6400C88F12 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B010F4E52801EB6400C88F12 /* Assets.xcassets */; };
11 | B010F4EA2801EB6400C88F12 /* CTMBAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B010F4E92801EB6400C88F12 /* CTMBAppDelegate.swift */; };
12 | B010F4EC2801EB6400C88F12 /* CTMBSceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B010F4EB2801EB6400C88F12 /* CTMBSceneDelegate.swift */; };
13 | B010F4EE2801EB6400C88F12 /* CTMBSceneDelegate+NSToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = B010F4ED2801EB6400C88F12 /* CTMBSceneDelegate+NSToolbar.swift */; };
14 | B010F4F12801EB6400C88F12 /* CTMBMainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B010F4F02801EB6400C88F12 /* CTMBMainViewController.swift */; };
15 | B010F4F42801EB6400C88F12 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B010F4F22801EB6400C88F12 /* LaunchScreen.storyboard */; };
16 | B010F5032801EB8700C88F12 /* AppKitIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = B010F5022801EB8700C88F12 /* AppKitIntegration.h */; settings = {ATTRIBUTES = (Public, ); }; };
17 | B010F5082801EB8E00C88F12 /* AppKitController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B010F5072801EB8E00C88F12 /* AppKitController.swift */; };
18 | B010F50C2801EBA400C88F12 /* AppKitIntegration.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = B010F5002801EB8700C88F12 /* AppKitIntegration.framework */; platformFilter = maccatalyst; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
19 | B010F50E2801EBEA00C88F12 /* NSObject+AppKitGlue.swift in Sources */ = {isa = PBXBuildFile; fileRef = B010F50D2801EBEA00C88F12 /* NSObject+AppKitGlue.swift */; };
20 | B010F5102801ECBF00C88F12 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B010F50F2801ECBF00C88F12 /* Localizable.strings */; };
21 | B010F5122801ED2900C88F12 /* CTMBAppDelegate+Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B010F5112801ED2900C88F12 /* CTMBAppDelegate+Actions.swift */; };
22 | /* End PBXBuildFile section */
23 |
24 | /* Begin PBXContainerItemProxy section */
25 | B010F5092801EB9B00C88F12 /* PBXContainerItemProxy */ = {
26 | isa = PBXContainerItemProxy;
27 | containerPortal = B010F4DA2801EB6400C88F12 /* Project object */;
28 | proxyType = 1;
29 | remoteGlobalIDString = B010F4FF2801EB8700C88F12;
30 | remoteInfo = AppKitIntegration;
31 | };
32 | /* End PBXContainerItemProxy section */
33 |
34 | /* Begin PBXCopyFilesBuildPhase section */
35 | B010F50B2801EB9E00C88F12 /* CopyFiles */ = {
36 | isa = PBXCopyFilesBuildPhase;
37 | buildActionMask = 2147483647;
38 | dstPath = "";
39 | dstSubfolderSpec = 10;
40 | files = (
41 | B010F50C2801EBA400C88F12 /* AppKitIntegration.framework in CopyFiles */,
42 | );
43 | runOnlyForDeploymentPostprocessing = 0;
44 | };
45 | /* End PBXCopyFilesBuildPhase section */
46 |
47 | /* Begin PBXFileReference section */
48 | B010F4E22801EB6400C88F12 /* CatalystToolbarMenuButton.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CatalystToolbarMenuButton.app; sourceTree = BUILT_PRODUCTS_DIR; };
49 | B010F4E52801EB6400C88F12 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
50 | B010F4E92801EB6400C88F12 /* CTMBAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTMBAppDelegate.swift; sourceTree = ""; };
51 | B010F4EB2801EB6400C88F12 /* CTMBSceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTMBSceneDelegate.swift; sourceTree = ""; };
52 | B010F4ED2801EB6400C88F12 /* CTMBSceneDelegate+NSToolbar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CTMBSceneDelegate+NSToolbar.swift"; sourceTree = ""; };
53 | B010F4F02801EB6400C88F12 /* CTMBMainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTMBMainViewController.swift; sourceTree = ""; };
54 | B010F4F32801EB6400C88F12 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
55 | B010F4F52801EB6400C88F12 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
56 | B010F5002801EB8700C88F12 /* AppKitIntegration.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AppKitIntegration.framework; sourceTree = BUILT_PRODUCTS_DIR; };
57 | B010F5022801EB8700C88F12 /* AppKitIntegration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppKitIntegration.h; sourceTree = ""; };
58 | B010F5072801EB8E00C88F12 /* AppKitController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppKitController.swift; sourceTree = ""; };
59 | B010F50D2801EBEA00C88F12 /* NSObject+AppKitGlue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSObject+AppKitGlue.swift"; sourceTree = ""; };
60 | B010F50F2801ECBF00C88F12 /* Localizable.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = Localizable.strings; sourceTree = ""; };
61 | B010F5112801ED2900C88F12 /* CTMBAppDelegate+Actions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CTMBAppDelegate+Actions.swift"; sourceTree = ""; };
62 | B010F5132801EF1900C88F12 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; };
63 | /* End PBXFileReference section */
64 |
65 | /* Begin PBXFrameworksBuildPhase section */
66 | B010F4DF2801EB6400C88F12 /* Frameworks */ = {
67 | isa = PBXFrameworksBuildPhase;
68 | buildActionMask = 2147483647;
69 | files = (
70 | );
71 | runOnlyForDeploymentPostprocessing = 0;
72 | };
73 | B010F4FD2801EB8700C88F12 /* Frameworks */ = {
74 | isa = PBXFrameworksBuildPhase;
75 | buildActionMask = 2147483647;
76 | files = (
77 | );
78 | runOnlyForDeploymentPostprocessing = 0;
79 | };
80 | /* End PBXFrameworksBuildPhase section */
81 |
82 | /* Begin PBXGroup section */
83 | B010F4D92801EB6400C88F12 = {
84 | isa = PBXGroup;
85 | children = (
86 | B010F5132801EF1900C88F12 /* README.md */,
87 | B010F4E42801EB6400C88F12 /* CatalystToolbarMenuButton */,
88 | B010F5012801EB8700C88F12 /* AppKitIntegration */,
89 | B010F4E32801EB6400C88F12 /* Products */,
90 | );
91 | sourceTree = "";
92 | };
93 | B010F4E32801EB6400C88F12 /* Products */ = {
94 | isa = PBXGroup;
95 | children = (
96 | B010F4E22801EB6400C88F12 /* CatalystToolbarMenuButton.app */,
97 | B010F5002801EB8700C88F12 /* AppKitIntegration.framework */,
98 | );
99 | name = Products;
100 | sourceTree = "";
101 | };
102 | B010F4E42801EB6400C88F12 /* CatalystToolbarMenuButton */ = {
103 | isa = PBXGroup;
104 | children = (
105 | B010F4E52801EB6400C88F12 /* Assets.xcassets */,
106 | B010F4F22801EB6400C88F12 /* LaunchScreen.storyboard */,
107 | B010F4F52801EB6400C88F12 /* Info.plist */,
108 | B010F50F2801ECBF00C88F12 /* Localizable.strings */,
109 | B010F4E72801EB6400C88F12 /* Source */,
110 | );
111 | path = CatalystToolbarMenuButton;
112 | sourceTree = "";
113 | };
114 | B010F4E72801EB6400C88F12 /* Source */ = {
115 | isa = PBXGroup;
116 | children = (
117 | B010F50D2801EBEA00C88F12 /* NSObject+AppKitGlue.swift */,
118 | B010F4E82801EB6400C88F12 /* Application */,
119 | B010F4EF2801EB6400C88F12 /* Main */,
120 | );
121 | path = Source;
122 | sourceTree = "";
123 | };
124 | B010F4E82801EB6400C88F12 /* Application */ = {
125 | isa = PBXGroup;
126 | children = (
127 | B010F4E92801EB6400C88F12 /* CTMBAppDelegate.swift */,
128 | B010F5112801ED2900C88F12 /* CTMBAppDelegate+Actions.swift */,
129 | B010F4EB2801EB6400C88F12 /* CTMBSceneDelegate.swift */,
130 | B010F4ED2801EB6400C88F12 /* CTMBSceneDelegate+NSToolbar.swift */,
131 | );
132 | path = Application;
133 | sourceTree = "";
134 | };
135 | B010F4EF2801EB6400C88F12 /* Main */ = {
136 | isa = PBXGroup;
137 | children = (
138 | B010F4F02801EB6400C88F12 /* CTMBMainViewController.swift */,
139 | );
140 | path = Main;
141 | sourceTree = "";
142 | };
143 | B010F5012801EB8700C88F12 /* AppKitIntegration */ = {
144 | isa = PBXGroup;
145 | children = (
146 | B010F5022801EB8700C88F12 /* AppKitIntegration.h */,
147 | B010F5072801EB8E00C88F12 /* AppKitController.swift */,
148 | );
149 | path = AppKitIntegration;
150 | sourceTree = "";
151 | };
152 | /* End PBXGroup section */
153 |
154 | /* Begin PBXHeadersBuildPhase section */
155 | B010F4FB2801EB8700C88F12 /* Headers */ = {
156 | isa = PBXHeadersBuildPhase;
157 | buildActionMask = 2147483647;
158 | files = (
159 | B010F5032801EB8700C88F12 /* AppKitIntegration.h in Headers */,
160 | );
161 | runOnlyForDeploymentPostprocessing = 0;
162 | };
163 | /* End PBXHeadersBuildPhase section */
164 |
165 | /* Begin PBXNativeTarget section */
166 | B010F4E12801EB6400C88F12 /* CatalystToolbarMenuButton */ = {
167 | isa = PBXNativeTarget;
168 | buildConfigurationList = B010F4F82801EB6400C88F12 /* Build configuration list for PBXNativeTarget "CatalystToolbarMenuButton" */;
169 | buildPhases = (
170 | B010F4DE2801EB6400C88F12 /* Sources */,
171 | B010F4DF2801EB6400C88F12 /* Frameworks */,
172 | B010F4E02801EB6400C88F12 /* Resources */,
173 | B010F50B2801EB9E00C88F12 /* CopyFiles */,
174 | );
175 | buildRules = (
176 | );
177 | dependencies = (
178 | B010F50A2801EB9B00C88F12 /* PBXTargetDependency */,
179 | );
180 | name = CatalystToolbarMenuButton;
181 | productName = CatalystToolbarMenuButton;
182 | productReference = B010F4E22801EB6400C88F12 /* CatalystToolbarMenuButton.app */;
183 | productType = "com.apple.product-type.application";
184 | };
185 | B010F4FF2801EB8700C88F12 /* AppKitIntegration */ = {
186 | isa = PBXNativeTarget;
187 | buildConfigurationList = B010F5042801EB8700C88F12 /* Build configuration list for PBXNativeTarget "AppKitIntegration" */;
188 | buildPhases = (
189 | B010F4FB2801EB8700C88F12 /* Headers */,
190 | B010F4FC2801EB8700C88F12 /* Sources */,
191 | B010F4FD2801EB8700C88F12 /* Frameworks */,
192 | B010F4FE2801EB8700C88F12 /* Resources */,
193 | );
194 | buildRules = (
195 | );
196 | dependencies = (
197 | );
198 | name = AppKitIntegration;
199 | productName = AppKitIntegration;
200 | productReference = B010F5002801EB8700C88F12 /* AppKitIntegration.framework */;
201 | productType = "com.apple.product-type.framework";
202 | };
203 | /* End PBXNativeTarget section */
204 |
205 | /* Begin PBXProject section */
206 | B010F4DA2801EB6400C88F12 /* Project object */ = {
207 | isa = PBXProject;
208 | attributes = {
209 | BuildIndependentTargetsInParallel = 1;
210 | CLASSPREFIX = CTMB;
211 | LastSwiftUpdateCheck = 1330;
212 | LastUpgradeCheck = 1330;
213 | TargetAttributes = {
214 | B010F4E12801EB6400C88F12 = {
215 | CreatedOnToolsVersion = 13.3;
216 | };
217 | B010F4FF2801EB8700C88F12 = {
218 | CreatedOnToolsVersion = 13.3;
219 | LastSwiftMigration = 1330;
220 | };
221 | };
222 | };
223 | buildConfigurationList = B010F4DD2801EB6400C88F12 /* Build configuration list for PBXProject "CatalystToolbarMenuButton" */;
224 | compatibilityVersion = "Xcode 13.0";
225 | developmentRegion = en;
226 | hasScannedForEncodings = 0;
227 | knownRegions = (
228 | en,
229 | Base,
230 | );
231 | mainGroup = B010F4D92801EB6400C88F12;
232 | productRefGroup = B010F4E32801EB6400C88F12 /* Products */;
233 | projectDirPath = "";
234 | projectRoot = "";
235 | targets = (
236 | B010F4E12801EB6400C88F12 /* CatalystToolbarMenuButton */,
237 | B010F4FF2801EB8700C88F12 /* AppKitIntegration */,
238 | );
239 | };
240 | /* End PBXProject section */
241 |
242 | /* Begin PBXResourcesBuildPhase section */
243 | B010F4E02801EB6400C88F12 /* Resources */ = {
244 | isa = PBXResourcesBuildPhase;
245 | buildActionMask = 2147483647;
246 | files = (
247 | B010F4E62801EB6400C88F12 /* Assets.xcassets in Resources */,
248 | B010F5102801ECBF00C88F12 /* Localizable.strings in Resources */,
249 | B010F4F42801EB6400C88F12 /* LaunchScreen.storyboard in Resources */,
250 | );
251 | runOnlyForDeploymentPostprocessing = 0;
252 | };
253 | B010F4FE2801EB8700C88F12 /* Resources */ = {
254 | isa = PBXResourcesBuildPhase;
255 | buildActionMask = 2147483647;
256 | files = (
257 | );
258 | runOnlyForDeploymentPostprocessing = 0;
259 | };
260 | /* End PBXResourcesBuildPhase section */
261 |
262 | /* Begin PBXSourcesBuildPhase section */
263 | B010F4DE2801EB6400C88F12 /* Sources */ = {
264 | isa = PBXSourcesBuildPhase;
265 | buildActionMask = 2147483647;
266 | files = (
267 | B010F4EA2801EB6400C88F12 /* CTMBAppDelegate.swift in Sources */,
268 | B010F4F12801EB6400C88F12 /* CTMBMainViewController.swift in Sources */,
269 | B010F5122801ED2900C88F12 /* CTMBAppDelegate+Actions.swift in Sources */,
270 | B010F50E2801EBEA00C88F12 /* NSObject+AppKitGlue.swift in Sources */,
271 | B010F4EE2801EB6400C88F12 /* CTMBSceneDelegate+NSToolbar.swift in Sources */,
272 | B010F4EC2801EB6400C88F12 /* CTMBSceneDelegate.swift in Sources */,
273 | );
274 | runOnlyForDeploymentPostprocessing = 0;
275 | };
276 | B010F4FC2801EB8700C88F12 /* Sources */ = {
277 | isa = PBXSourcesBuildPhase;
278 | buildActionMask = 2147483647;
279 | files = (
280 | B010F5082801EB8E00C88F12 /* AppKitController.swift in Sources */,
281 | );
282 | runOnlyForDeploymentPostprocessing = 0;
283 | };
284 | /* End PBXSourcesBuildPhase section */
285 |
286 | /* Begin PBXTargetDependency section */
287 | B010F50A2801EB9B00C88F12 /* PBXTargetDependency */ = {
288 | isa = PBXTargetDependency;
289 | platformFilter = maccatalyst;
290 | target = B010F4FF2801EB8700C88F12 /* AppKitIntegration */;
291 | targetProxy = B010F5092801EB9B00C88F12 /* PBXContainerItemProxy */;
292 | };
293 | /* End PBXTargetDependency section */
294 |
295 | /* Begin PBXVariantGroup section */
296 | B010F4F22801EB6400C88F12 /* LaunchScreen.storyboard */ = {
297 | isa = PBXVariantGroup;
298 | children = (
299 | B010F4F32801EB6400C88F12 /* Base */,
300 | );
301 | name = LaunchScreen.storyboard;
302 | sourceTree = "";
303 | };
304 | /* End PBXVariantGroup section */
305 |
306 | /* Begin XCBuildConfiguration section */
307 | B010F4F62801EB6400C88F12 /* Debug */ = {
308 | isa = XCBuildConfiguration;
309 | buildSettings = {
310 | ALWAYS_SEARCH_USER_PATHS = NO;
311 | CLANG_ANALYZER_NONNULL = YES;
312 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
313 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
314 | CLANG_ENABLE_MODULES = YES;
315 | CLANG_ENABLE_OBJC_ARC = YES;
316 | CLANG_ENABLE_OBJC_WEAK = YES;
317 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
318 | CLANG_WARN_BOOL_CONVERSION = YES;
319 | CLANG_WARN_COMMA = YES;
320 | CLANG_WARN_CONSTANT_CONVERSION = YES;
321 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
322 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
323 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
324 | CLANG_WARN_EMPTY_BODY = YES;
325 | CLANG_WARN_ENUM_CONVERSION = YES;
326 | CLANG_WARN_INFINITE_RECURSION = YES;
327 | CLANG_WARN_INT_CONVERSION = YES;
328 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
329 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
330 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
331 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
332 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
333 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
334 | CLANG_WARN_STRICT_PROTOTYPES = YES;
335 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
336 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
337 | CLANG_WARN_UNREACHABLE_CODE = YES;
338 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
339 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
340 | COPY_PHASE_STRIP = NO;
341 | DEBUG_INFORMATION_FORMAT = dwarf;
342 | ENABLE_STRICT_OBJC_MSGSEND = YES;
343 | ENABLE_TESTABILITY = YES;
344 | GCC_C_LANGUAGE_STANDARD = gnu11;
345 | GCC_DYNAMIC_NO_PIC = NO;
346 | GCC_NO_COMMON_BLOCKS = YES;
347 | GCC_OPTIMIZATION_LEVEL = 0;
348 | GCC_PREPROCESSOR_DEFINITIONS = (
349 | "DEBUG=1",
350 | "$(inherited)",
351 | );
352 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
353 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
354 | GCC_WARN_UNDECLARED_SELECTOR = YES;
355 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
356 | GCC_WARN_UNUSED_FUNCTION = YES;
357 | GCC_WARN_UNUSED_VARIABLE = YES;
358 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
359 | MTL_FAST_MATH = YES;
360 | ONLY_ACTIVE_ARCH = YES;
361 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
362 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
363 | SWIFT_VERSION = 5.0;
364 | };
365 | name = Debug;
366 | };
367 | B010F4F72801EB6400C88F12 /* Release */ = {
368 | isa = XCBuildConfiguration;
369 | buildSettings = {
370 | ALWAYS_SEARCH_USER_PATHS = NO;
371 | CLANG_ANALYZER_NONNULL = YES;
372 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
373 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
374 | CLANG_ENABLE_MODULES = YES;
375 | CLANG_ENABLE_OBJC_ARC = YES;
376 | CLANG_ENABLE_OBJC_WEAK = YES;
377 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
378 | CLANG_WARN_BOOL_CONVERSION = YES;
379 | CLANG_WARN_COMMA = YES;
380 | CLANG_WARN_CONSTANT_CONVERSION = YES;
381 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
382 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
383 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
384 | CLANG_WARN_EMPTY_BODY = YES;
385 | CLANG_WARN_ENUM_CONVERSION = YES;
386 | CLANG_WARN_INFINITE_RECURSION = YES;
387 | CLANG_WARN_INT_CONVERSION = YES;
388 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
389 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
390 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
391 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
392 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
393 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
394 | CLANG_WARN_STRICT_PROTOTYPES = YES;
395 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
396 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
397 | CLANG_WARN_UNREACHABLE_CODE = YES;
398 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
399 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
400 | COPY_PHASE_STRIP = NO;
401 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
402 | ENABLE_NS_ASSERTIONS = NO;
403 | ENABLE_STRICT_OBJC_MSGSEND = YES;
404 | GCC_C_LANGUAGE_STANDARD = gnu11;
405 | GCC_NO_COMMON_BLOCKS = YES;
406 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
407 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
408 | GCC_WARN_UNDECLARED_SELECTOR = YES;
409 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
410 | GCC_WARN_UNUSED_FUNCTION = YES;
411 | GCC_WARN_UNUSED_VARIABLE = YES;
412 | MTL_ENABLE_DEBUG_INFO = NO;
413 | MTL_FAST_MATH = YES;
414 | SWIFT_COMPILATION_MODE = wholemodule;
415 | SWIFT_OPTIMIZATION_LEVEL = "-O";
416 | SWIFT_VERSION = 5.0;
417 | };
418 | name = Release;
419 | };
420 | B010F4F92801EB6400C88F12 /* Debug */ = {
421 | isa = XCBuildConfiguration;
422 | buildSettings = {
423 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
424 | CLANG_STATIC_ANALYZER_MODE = deep;
425 | CODE_SIGN_IDENTITY = "iPhone Developer";
426 | CODE_SIGN_STYLE = Automatic;
427 | CURRENT_PROJECT_VERSION = 1;
428 | DEVELOPMENT_TEAM = 2ZDN69KUUV;
429 | GCC_TREAT_WARNINGS_AS_ERRORS = deep;
430 | GCC_WARN_PEDANTIC = deep;
431 | GENERATE_INFOPLIST_FILE = YES;
432 | INFOPLIST_FILE = "$(PRODUCT_NAME)/Info.plist";
433 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
434 | "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.2;
435 | LD_RUNPATH_SEARCH_PATHS = (
436 | "$(inherited)",
437 | "@executable_path/Frameworks",
438 | );
439 | MARKETING_VERSION = 1.0;
440 | PRODUCT_BUNDLE_IDENTIFIER = com.highcaffeinecontent.CatalystToolbarMenuButton;
441 | PRODUCT_NAME = CatalystToolbarMenuButton;
442 | RUN_CLANG_STATIC_ANALYZER = YES;
443 | SDKROOT = iphoneos;
444 | SUPPORTS_MACCATALYST = YES;
445 | SWIFT_EMIT_LOC_STRINGS = YES;
446 | SWIFT_TREAT_WARNINGS_AS_ERRORS = YES;
447 | SWIFT_VERSION = 5.0;
448 | TARGETED_DEVICE_FAMILY = "1,2,6";
449 | };
450 | name = Debug;
451 | };
452 | B010F4FA2801EB6400C88F12 /* Release */ = {
453 | isa = XCBuildConfiguration;
454 | buildSettings = {
455 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
456 | CLANG_STATIC_ANALYZER_MODE = deep;
457 | CODE_SIGN_IDENTITY = "iPhone Developer";
458 | CODE_SIGN_STYLE = Automatic;
459 | CURRENT_PROJECT_VERSION = 1;
460 | DEVELOPMENT_TEAM = 2ZDN69KUUV;
461 | GCC_TREAT_WARNINGS_AS_ERRORS = deep;
462 | GCC_WARN_PEDANTIC = deep;
463 | GENERATE_INFOPLIST_FILE = YES;
464 | INFOPLIST_FILE = "$(PRODUCT_NAME)/Info.plist";
465 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
466 | "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.2;
467 | LD_RUNPATH_SEARCH_PATHS = (
468 | "$(inherited)",
469 | "@executable_path/Frameworks",
470 | );
471 | MARKETING_VERSION = 1.0;
472 | PRODUCT_BUNDLE_IDENTIFIER = com.highcaffeinecontent.CatalystToolbarMenuButton;
473 | PRODUCT_NAME = CatalystToolbarMenuButton;
474 | RUN_CLANG_STATIC_ANALYZER = YES;
475 | SDKROOT = iphoneos;
476 | SUPPORTS_MACCATALYST = YES;
477 | SWIFT_EMIT_LOC_STRINGS = YES;
478 | SWIFT_TREAT_WARNINGS_AS_ERRORS = YES;
479 | SWIFT_VERSION = 5.0;
480 | TARGETED_DEVICE_FAMILY = "1,2,6";
481 | VALIDATE_PRODUCT = YES;
482 | };
483 | name = Release;
484 | };
485 | B010F5052801EB8700C88F12 /* Debug */ = {
486 | isa = XCBuildConfiguration;
487 | buildSettings = {
488 | CLANG_ENABLE_MODULES = YES;
489 | CODE_SIGN_STYLE = Automatic;
490 | COMBINE_HIDPI_IMAGES = YES;
491 | CURRENT_PROJECT_VERSION = 1;
492 | DEFINES_MODULE = YES;
493 | DEVELOPMENT_TEAM = 2ZDN69KUUV;
494 | DYLIB_COMPATIBILITY_VERSION = 1;
495 | DYLIB_CURRENT_VERSION = 1;
496 | DYLIB_INSTALL_NAME_BASE = "@rpath";
497 | GENERATE_INFOPLIST_FILE = YES;
498 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
499 | INFOPLIST_KEY_NSPrincipalClass = "$(PRODUCT_MODULE_NAME).AppKitController";
500 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
501 | LD_RUNPATH_SEARCH_PATHS = (
502 | "$(inherited)",
503 | "@executable_path/../Frameworks",
504 | "@loader_path/Frameworks",
505 | );
506 | MACOSX_DEPLOYMENT_TARGET = 12.3;
507 | MARKETING_VERSION = 1.0;
508 | PRODUCT_BUNDLE_IDENTIFIER = com.highcaffeinecontent.AppKitIntegration;
509 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
510 | SDKROOT = macosx;
511 | SKIP_INSTALL = YES;
512 | SWIFT_EMIT_LOC_STRINGS = YES;
513 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
514 | SWIFT_VERSION = 5.0;
515 | VERSIONING_SYSTEM = "apple-generic";
516 | VERSION_INFO_PREFIX = "";
517 | };
518 | name = Debug;
519 | };
520 | B010F5062801EB8700C88F12 /* Release */ = {
521 | isa = XCBuildConfiguration;
522 | buildSettings = {
523 | CLANG_ENABLE_MODULES = YES;
524 | CODE_SIGN_STYLE = Automatic;
525 | COMBINE_HIDPI_IMAGES = YES;
526 | CURRENT_PROJECT_VERSION = 1;
527 | DEFINES_MODULE = YES;
528 | DEVELOPMENT_TEAM = 2ZDN69KUUV;
529 | DYLIB_COMPATIBILITY_VERSION = 1;
530 | DYLIB_CURRENT_VERSION = 1;
531 | DYLIB_INSTALL_NAME_BASE = "@rpath";
532 | GENERATE_INFOPLIST_FILE = YES;
533 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
534 | INFOPLIST_KEY_NSPrincipalClass = "$(PRODUCT_MODULE_NAME).AppKitController";
535 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
536 | LD_RUNPATH_SEARCH_PATHS = (
537 | "$(inherited)",
538 | "@executable_path/../Frameworks",
539 | "@loader_path/Frameworks",
540 | );
541 | MACOSX_DEPLOYMENT_TARGET = 12.3;
542 | MARKETING_VERSION = 1.0;
543 | PRODUCT_BUNDLE_IDENTIFIER = com.highcaffeinecontent.AppKitIntegration;
544 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
545 | SDKROOT = macosx;
546 | SKIP_INSTALL = YES;
547 | SWIFT_EMIT_LOC_STRINGS = YES;
548 | SWIFT_VERSION = 5.0;
549 | VERSIONING_SYSTEM = "apple-generic";
550 | VERSION_INFO_PREFIX = "";
551 | };
552 | name = Release;
553 | };
554 | /* End XCBuildConfiguration section */
555 |
556 | /* Begin XCConfigurationList section */
557 | B010F4DD2801EB6400C88F12 /* Build configuration list for PBXProject "CatalystToolbarMenuButton" */ = {
558 | isa = XCConfigurationList;
559 | buildConfigurations = (
560 | B010F4F62801EB6400C88F12 /* Debug */,
561 | B010F4F72801EB6400C88F12 /* Release */,
562 | );
563 | defaultConfigurationIsVisible = 0;
564 | defaultConfigurationName = Release;
565 | };
566 | B010F4F82801EB6400C88F12 /* Build configuration list for PBXNativeTarget "CatalystToolbarMenuButton" */ = {
567 | isa = XCConfigurationList;
568 | buildConfigurations = (
569 | B010F4F92801EB6400C88F12 /* Debug */,
570 | B010F4FA2801EB6400C88F12 /* Release */,
571 | );
572 | defaultConfigurationIsVisible = 0;
573 | defaultConfigurationName = Release;
574 | };
575 | B010F5042801EB8700C88F12 /* Build configuration list for PBXNativeTarget "AppKitIntegration" */ = {
576 | isa = XCConfigurationList;
577 | buildConfigurations = (
578 | B010F5052801EB8700C88F12 /* Debug */,
579 | B010F5062801EB8700C88F12 /* Release */,
580 | );
581 | defaultConfigurationIsVisible = 0;
582 | defaultConfigurationName = Release;
583 | };
584 | /* End XCConfigurationList section */
585 | };
586 | rootObject = B010F4DA2801EB6400C88F12 /* Project object */;
587 | }
588 |
--------------------------------------------------------------------------------