├── SwiftPluginApp
├── Assets.xcassets
│ ├── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── SwiftPluginApp.entitlements
├── Info.plist
├── AppDelegate.swift
└── Base.lproj
│ └── MainMenu.xib
├── SwiftPlugin.xcodeproj
├── xcuserdata
│ └── johnholdsworth.xcuserdatad
│ │ ├── xcdebugger
│ │ └── Breakpoints_v2.xcbkptlist
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ ├── xcuserdata
│ │ └── johnholdsworth.xcuserdatad
│ │ │ ├── UserInterfaceState.xcuserstate
│ │ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata
│ │ ├── WorkspaceSettings.xcsettings
│ │ └── IDEWorkspaceChecks.plist
├── xcshareddata
│ └── xcschemes
│ │ ├── SwiftPlugin.xcscheme
│ │ └── SwiftPluginApp.xcscheme
└── project.pbxproj
├── README.md
├── SwiftPlugin
├── PluginAPI.swift
└── main.swift
├── MyPlugin
├── Info.plist
└── MyPlugin.swift
└── LICENSE
/SwiftPluginApp/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/SwiftPlugin.xcodeproj/xcuserdata/johnholdsworth.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SwiftPlugin
2 | A way to import classes from plugins. The example shows how the implementation of a class
3 | "MyPlugin" in a bundle (read .dylib) can be overlayed over a class in the main application.
4 |
--------------------------------------------------------------------------------
/SwiftPlugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/SwiftPlugin.xcodeproj/project.xcworkspace/xcuserdata/johnholdsworth.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/johnno1962/SwiftPlugin/HEAD/SwiftPlugin.xcodeproj/project.xcworkspace/xcuserdata/johnholdsworth.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/SwiftPlugin.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/SwiftPluginApp/SwiftPluginApp.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/SwiftPlugin.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/SwiftPlugin/PluginAPI.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PluginAPI.swift
3 | // SwiftPlugin
4 | //
5 | // Created by John Holdsworth on 11/02/2019.
6 | // Copyright © 2019 John Holdsworth. All rights reserved.
7 | //
8 |
9 | // class + instance methods to be implemented in the Plugin
10 |
11 | open class PluginAPI {
12 |
13 | open class func getInstance() -> PluginAPI {
14 | fatalError("getInstanceMain")
15 | }
16 |
17 | open func incCounter() -> Int {
18 | fatalError("incCounterMain")
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/SwiftPlugin.xcodeproj/project.xcworkspace/xcuserdata/johnholdsworth.xcuserdatad/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildLocationStyle
6 | UseAppPreferences
7 | BuildSystemType
8 | Original
9 | CustomBuildLocationType
10 | RelativeToDerivedData
11 | DerivedDataLocationStyle
12 | Default
13 | EnabledFullIndexStoreVisibility
14 |
15 | IssueFilterStyle
16 | ShowActiveSchemeOnly
17 | LiveSourceIssuesEnabled
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/MyPlugin/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 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | NSHumanReadableCopyright
22 | Copyright © 2019 John Holdsworth. All rights reserved.
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/MyPlugin/MyPlugin.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MyPlugin.swift
3 | // MyPlugin
4 | //
5 | // Created by John Holdsworth on 10/02/2019.
6 | // Copyright © 2019 John Holdsworth. All rights reserved.
7 | //
8 |
9 | // way to find plugin class not involving mangling
10 |
11 | @_cdecl("principalClass")
12 | public func principalClass() -> UnsafeRawPointer {
13 | return unsafeBitCast(MyPlugin.self, to: UnsafeRawPointer.self)
14 | }
15 |
16 | // Concrete implementation of the plugin
17 |
18 | open class MyPlugin: PluginAPI {
19 |
20 | // The module name of plugin project must be the same as the parent project
21 | // so the class symbols match. This requires using the legacy build system.
22 |
23 | open var counter = 0
24 |
25 | open override class func getInstance() -> MyPlugin {
26 | print("getInstancePlugin")
27 | return MyPlugin()
28 | }
29 |
30 | open override func incCounter() -> Int {
31 | print("incCounterPlugin")
32 | counter += 1
33 | return counter
34 | }
35 | }
36 |
37 |
--------------------------------------------------------------------------------
/SwiftPlugin.xcodeproj/xcuserdata/johnholdsworth.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | MyPlugin.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 2
11 |
12 | SwiftPlugin.xcscheme_^#shared#^_
13 |
14 | orderHint
15 | 0
16 |
17 | SwiftPluginApp.xcscheme_^#shared#^_
18 |
19 | orderHint
20 | 1
21 |
22 |
23 | SuppressBuildableAutocreation
24 |
25 | BB8A4AB3221163E800F315B2
26 |
27 | primary
28 |
29 |
30 | BBC6E0532210835600635FD6
31 |
32 | primary
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 John Holdsworth
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/SwiftPluginApp/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | LSMinimumSystemVersion
24 | $(MACOSX_DEPLOYMENT_TARGET)
25 | NSHumanReadableCopyright
26 | Copyright © 2019 John Holdsworth. All rights reserved.
27 | NSMainNibFile
28 | MainMenu
29 | NSPrincipalClass
30 | NSApplication
31 |
32 |
33 |
--------------------------------------------------------------------------------
/SwiftPluginApp/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "size" : "16x16",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "size" : "16x16",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "size" : "32x32",
16 | "scale" : "1x"
17 | },
18 | {
19 | "idiom" : "mac",
20 | "size" : "32x32",
21 | "scale" : "2x"
22 | },
23 | {
24 | "idiom" : "mac",
25 | "size" : "128x128",
26 | "scale" : "1x"
27 | },
28 | {
29 | "idiom" : "mac",
30 | "size" : "128x128",
31 | "scale" : "2x"
32 | },
33 | {
34 | "idiom" : "mac",
35 | "size" : "256x256",
36 | "scale" : "1x"
37 | },
38 | {
39 | "idiom" : "mac",
40 | "size" : "256x256",
41 | "scale" : "2x"
42 | },
43 | {
44 | "idiom" : "mac",
45 | "size" : "512x512",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "mac",
50 | "size" : "512x512",
51 | "scale" : "2x"
52 | }
53 | ],
54 | "info" : {
55 | "version" : 1,
56 | "author" : "xcode"
57 | }
58 | }
--------------------------------------------------------------------------------
/SwiftPlugin/main.swift:
--------------------------------------------------------------------------------
1 | //
2 | // main.swift
3 | // SwiftPlugin
4 | //
5 | // Created by John Holdsworth on 10/02/2019.
6 | // Copyright © 2019 John Holdsworth. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | func LoadPlugin(onto: T.Type, dylib: String) -> T.Type {
12 | guard let handle = dlopen(dylib, RTLD_NOW) else {
13 | fatalError("Could not open \(dylib) \(String(cString: dlerror()))")
14 | }
15 |
16 | var info = Dl_info()
17 | dladdr(unsafeBitCast(onto, to: UnsafeRawPointer?.self), &info)
18 | guard let replacement = dlsym(handle, info.dli_sname) else {
19 | fatalError("Could not locate class \(String(cString: info.dli_sname))")
20 | }
21 |
22 | return unsafeBitCast(replacement, to: T.Type.self)
23 | }
24 |
25 | print("Hello, World!")
26 |
27 | var tmp = 0
28 | var info = Dl_info()
29 | dladdr(&tmp, &info)
30 |
31 | let pluginPath = URL(fileURLWithPath: String(cString: info.dli_sname)).deletingLastPathComponent()
32 | .appendingPathComponent("MyPlugin.bundle/Contents/MacOS/MyPlugin").path
33 |
34 | // Class MyPlugin from bundle is overlayed onto this placeholder class
35 |
36 | open class MyPlugin: PluginAPI {}
37 |
38 | let clazz = LoadPlugin(onto: MyPlugin.self, dylib: pluginPath)
39 |
40 | let instance = clazz.getInstance()
41 | print(instance.incCounter())
42 | print(instance.incCounter())
43 |
--------------------------------------------------------------------------------
/SwiftPluginApp/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // SwiftPluginApp
4 | //
5 | // Created by John Holdsworth on 11/02/2019.
6 | // Copyright © 2019 John Holdsworth. All rights reserved.
7 | //
8 |
9 | import Cocoa
10 |
11 | // Class MyPlugin from bundle is overlayed onto this placeholder class
12 |
13 | @NSApplicationMain
14 | class AppDelegate: NSObject, NSApplicationDelegate {
15 |
16 | @IBOutlet weak var window: NSWindow!
17 |
18 |
19 | func applicationDidFinishLaunching(_ aNotification: Notification) {
20 | // Insert code here to initialize your application
21 |
22 | // version not reliant on plugin class having same mangled name
23 | func LoadPlugin(onto: T.Type, dylib: String) -> T.Type {
24 | guard let handle = dlopen(dylib, RTLD_NOW) else {
25 | fatalError("Could not open \(dylib) \(String(cString: dlerror()))")
26 | }
27 |
28 | guard let principalClass = dlsym(handle, "principalClass") else {
29 | fatalError("Could not locate principalClass function")
30 | }
31 |
32 | let replacement = unsafeBitCast(principalClass,
33 | to: (@convention (c) () -> UnsafeRawPointer).self)
34 | return unsafeBitCast(replacement(), to: T.Type.self)
35 | }
36 |
37 | print("Hello, World!")
38 |
39 | // find path to dylib
40 | let bundlePath = Bundle.main.path(forResource: "MyPlugin", ofType: "bundle")!
41 | let pluginPath = Bundle(path: bundlePath)!.executablePath!
42 |
43 | // get class (type) object for plugin class
44 | let clazz = LoadPlugin(onto: PluginAPI.self, dylib: pluginPath)
45 |
46 | let instance = clazz.getInstance()
47 | print(instance.incCounter())
48 | print(instance.incCounter())
49 | }
50 |
51 | func applicationWillTerminate(_ aNotification: Notification) {
52 | // Insert code here to tear down your application
53 | }
54 |
55 |
56 | }
57 |
58 |
--------------------------------------------------------------------------------
/SwiftPlugin.xcodeproj/xcshareddata/xcschemes/SwiftPlugin.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
43 |
44 |
54 |
56 |
62 |
63 |
64 |
65 |
66 |
67 |
73 |
75 |
81 |
82 |
83 |
84 |
86 |
87 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/SwiftPlugin.xcodeproj/xcshareddata/xcschemes/SwiftPluginApp.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 |
43 |
44 |
54 |
56 |
62 |
63 |
64 |
65 |
66 |
67 |
73 |
75 |
81 |
82 |
83 |
84 |
86 |
87 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/SwiftPlugin.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | BB4B11842211035F00FB6B6A /* PluginAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB4B11832211035F00FB6B6A /* PluginAPI.swift */; };
11 | BB4B11852211035F00FB6B6A /* PluginAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB4B11832211035F00FB6B6A /* PluginAPI.swift */; };
12 | BB8A4AB7221163E800F315B2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8A4AB6221163E800F315B2 /* AppDelegate.swift */; };
13 | BB8A4AB9221163EC00F315B2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BB8A4AB8221163EC00F315B2 /* Assets.xcassets */; };
14 | BB8A4ABC221163EC00F315B2 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB8A4ABA221163EC00F315B2 /* MainMenu.xib */; };
15 | BB8A4AC22211646600F315B2 /* PluginAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB4B11832211035F00FB6B6A /* PluginAPI.swift */; };
16 | BBC6E0582210835600635FD6 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC6E0572210835600635FD6 /* main.swift */; };
17 | BBC6E0692210840B00635FD6 /* MyPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC6E0682210840B00635FD6 /* MyPlugin.swift */; };
18 | BBD22F192211676B00187B60 /* MyPlugin.bundle in Resources */ = {isa = PBXBuildFile; fileRef = BBC6E062221083E700635FD6 /* MyPlugin.bundle */; };
19 | /* End PBXBuildFile section */
20 |
21 | /* Begin PBXContainerItemProxy section */
22 | BB4B117B2210856D00FB6B6A /* PBXContainerItemProxy */ = {
23 | isa = PBXContainerItemProxy;
24 | containerPortal = BBC6E04C2210835600635FD6 /* Project object */;
25 | proxyType = 1;
26 | remoteGlobalIDString = BBC6E061221083E700635FD6;
27 | remoteInfo = MyPlugin;
28 | };
29 | BB8A4AC32211652200F315B2 /* PBXContainerItemProxy */ = {
30 | isa = PBXContainerItemProxy;
31 | containerPortal = BBC6E04C2210835600635FD6 /* Project object */;
32 | proxyType = 1;
33 | remoteGlobalIDString = BBC6E061221083E700635FD6;
34 | remoteInfo = MyPlugin;
35 | };
36 | /* End PBXContainerItemProxy section */
37 |
38 | /* Begin PBXCopyFilesBuildPhase section */
39 | BBC6E0522210835600635FD6 /* CopyFiles */ = {
40 | isa = PBXCopyFilesBuildPhase;
41 | buildActionMask = 2147483647;
42 | dstPath = /usr/share/man/man1/;
43 | dstSubfolderSpec = 0;
44 | files = (
45 | );
46 | runOnlyForDeploymentPostprocessing = 1;
47 | };
48 | /* End PBXCopyFilesBuildPhase section */
49 |
50 | /* Begin PBXFileReference section */
51 | BB4B117F2210DF5200FB6B6A /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; };
52 | BB4B11832211035F00FB6B6A /* PluginAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PluginAPI.swift; sourceTree = ""; };
53 | BB8A4AB4221163E800F315B2 /* SwiftPluginApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftPluginApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
54 | BB8A4AB6221163E800F315B2 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
55 | BB8A4AB8221163EC00F315B2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
56 | BB8A4ABB221163EC00F315B2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
57 | BB8A4ABD221163EC00F315B2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
58 | BB8A4ABE221163EC00F315B2 /* SwiftPluginApp.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SwiftPluginApp.entitlements; sourceTree = ""; };
59 | BBC6E0542210835600635FD6 /* SwiftPlugin */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = SwiftPlugin; sourceTree = BUILT_PRODUCTS_DIR; };
60 | BBC6E0572210835600635FD6 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; };
61 | BBC6E062221083E700635FD6 /* MyPlugin.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MyPlugin.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
62 | BBC6E064221083E700635FD6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
63 | BBC6E0682210840B00635FD6 /* MyPlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPlugin.swift; sourceTree = ""; };
64 | /* End PBXFileReference section */
65 |
66 | /* Begin PBXFrameworksBuildPhase section */
67 | BB8A4AB1221163E800F315B2 /* Frameworks */ = {
68 | isa = PBXFrameworksBuildPhase;
69 | buildActionMask = 2147483647;
70 | files = (
71 | );
72 | runOnlyForDeploymentPostprocessing = 0;
73 | };
74 | BBC6E0512210835600635FD6 /* Frameworks */ = {
75 | isa = PBXFrameworksBuildPhase;
76 | buildActionMask = 2147483647;
77 | files = (
78 | );
79 | runOnlyForDeploymentPostprocessing = 0;
80 | };
81 | BBC6E05F221083E700635FD6 /* Frameworks */ = {
82 | isa = PBXFrameworksBuildPhase;
83 | buildActionMask = 2147483647;
84 | files = (
85 | );
86 | runOnlyForDeploymentPostprocessing = 0;
87 | };
88 | /* End PBXFrameworksBuildPhase section */
89 |
90 | /* Begin PBXGroup section */
91 | BB8A4AB5221163E800F315B2 /* SwiftPluginApp */ = {
92 | isa = PBXGroup;
93 | children = (
94 | BB8A4AB6221163E800F315B2 /* AppDelegate.swift */,
95 | BB8A4AB8221163EC00F315B2 /* Assets.xcassets */,
96 | BB8A4ABA221163EC00F315B2 /* MainMenu.xib */,
97 | BB8A4ABD221163EC00F315B2 /* Info.plist */,
98 | BB8A4ABE221163EC00F315B2 /* SwiftPluginApp.entitlements */,
99 | );
100 | path = SwiftPluginApp;
101 | sourceTree = "";
102 | };
103 | BBC6E04B2210835600635FD6 = {
104 | isa = PBXGroup;
105 | children = (
106 | BB4B117F2210DF5200FB6B6A /* README.md */,
107 | BBC6E0562210835600635FD6 /* SwiftPlugin */,
108 | BBC6E063221083E700635FD6 /* MyPlugin */,
109 | BB8A4AB5221163E800F315B2 /* SwiftPluginApp */,
110 | BBC6E0552210835600635FD6 /* Products */,
111 | );
112 | sourceTree = "";
113 | };
114 | BBC6E0552210835600635FD6 /* Products */ = {
115 | isa = PBXGroup;
116 | children = (
117 | BBC6E0542210835600635FD6 /* SwiftPlugin */,
118 | BBC6E062221083E700635FD6 /* MyPlugin.bundle */,
119 | BB8A4AB4221163E800F315B2 /* SwiftPluginApp.app */,
120 | );
121 | name = Products;
122 | sourceTree = "";
123 | };
124 | BBC6E0562210835600635FD6 /* SwiftPlugin */ = {
125 | isa = PBXGroup;
126 | children = (
127 | BBC6E0572210835600635FD6 /* main.swift */,
128 | BB4B11832211035F00FB6B6A /* PluginAPI.swift */,
129 | );
130 | path = SwiftPlugin;
131 | sourceTree = "";
132 | };
133 | BBC6E063221083E700635FD6 /* MyPlugin */ = {
134 | isa = PBXGroup;
135 | children = (
136 | BBC6E064221083E700635FD6 /* Info.plist */,
137 | BBC6E0682210840B00635FD6 /* MyPlugin.swift */,
138 | );
139 | path = MyPlugin;
140 | sourceTree = "";
141 | };
142 | /* End PBXGroup section */
143 |
144 | /* Begin PBXNativeTarget section */
145 | BB8A4AB3221163E800F315B2 /* SwiftPluginApp */ = {
146 | isa = PBXNativeTarget;
147 | buildConfigurationList = BB8A4AC1221163EC00F315B2 /* Build configuration list for PBXNativeTarget "SwiftPluginApp" */;
148 | buildPhases = (
149 | BB8A4AB0221163E800F315B2 /* Sources */,
150 | BB8A4AB1221163E800F315B2 /* Frameworks */,
151 | BB8A4AB2221163E800F315B2 /* Resources */,
152 | );
153 | buildRules = (
154 | );
155 | dependencies = (
156 | BB8A4AC42211652200F315B2 /* PBXTargetDependency */,
157 | );
158 | name = SwiftPluginApp;
159 | productName = SwiftPluginApp;
160 | productReference = BB8A4AB4221163E800F315B2 /* SwiftPluginApp.app */;
161 | productType = "com.apple.product-type.application";
162 | };
163 | BBC6E0532210835600635FD6 /* SwiftPlugin */ = {
164 | isa = PBXNativeTarget;
165 | buildConfigurationList = BBC6E05B2210835600635FD6 /* Build configuration list for PBXNativeTarget "SwiftPlugin" */;
166 | buildPhases = (
167 | BBC6E0502210835600635FD6 /* Sources */,
168 | BBC6E0512210835600635FD6 /* Frameworks */,
169 | BBC6E0522210835600635FD6 /* CopyFiles */,
170 | );
171 | buildRules = (
172 | );
173 | dependencies = (
174 | BB4B117C2210856D00FB6B6A /* PBXTargetDependency */,
175 | );
176 | name = SwiftPlugin;
177 | productName = SwiftPlugin;
178 | productReference = BBC6E0542210835600635FD6 /* SwiftPlugin */;
179 | productType = "com.apple.product-type.tool";
180 | };
181 | BBC6E061221083E700635FD6 /* MyPlugin */ = {
182 | isa = PBXNativeTarget;
183 | buildConfigurationList = BBC6E065221083E700635FD6 /* Build configuration list for PBXNativeTarget "MyPlugin" */;
184 | buildPhases = (
185 | BBC6E05E221083E700635FD6 /* Sources */,
186 | BBC6E05F221083E700635FD6 /* Frameworks */,
187 | BBC6E060221083E700635FD6 /* Resources */,
188 | );
189 | buildRules = (
190 | );
191 | dependencies = (
192 | );
193 | name = MyPlugin;
194 | productName = MyPlugin;
195 | productReference = BBC6E062221083E700635FD6 /* MyPlugin.bundle */;
196 | productType = "com.apple.product-type.bundle";
197 | };
198 | /* End PBXNativeTarget section */
199 |
200 | /* Begin PBXProject section */
201 | BBC6E04C2210835600635FD6 /* Project object */ = {
202 | isa = PBXProject;
203 | attributes = {
204 | LastSwiftUpdateCheck = 1010;
205 | LastUpgradeCheck = 1020;
206 | ORGANIZATIONNAME = "John Holdsworth";
207 | TargetAttributes = {
208 | BB8A4AB3221163E800F315B2 = {
209 | CreatedOnToolsVersion = 10.1;
210 | SystemCapabilities = {
211 | com.apple.Sandbox = {
212 | enabled = 1;
213 | };
214 | };
215 | };
216 | BBC6E0532210835600635FD6 = {
217 | CreatedOnToolsVersion = 10.2;
218 | };
219 | BBC6E061221083E700635FD6 = {
220 | CreatedOnToolsVersion = 10.2;
221 | LastSwiftMigration = 1020;
222 | };
223 | };
224 | };
225 | buildConfigurationList = BBC6E04F2210835600635FD6 /* Build configuration list for PBXProject "SwiftPlugin" */;
226 | compatibilityVersion = "Xcode 9.3";
227 | developmentRegion = en;
228 | hasScannedForEncodings = 0;
229 | knownRegions = (
230 | en,
231 | Base,
232 | );
233 | mainGroup = BBC6E04B2210835600635FD6;
234 | productRefGroup = BBC6E0552210835600635FD6 /* Products */;
235 | projectDirPath = "";
236 | projectRoot = "";
237 | targets = (
238 | BBC6E0532210835600635FD6 /* SwiftPlugin */,
239 | BBC6E061221083E700635FD6 /* MyPlugin */,
240 | BB8A4AB3221163E800F315B2 /* SwiftPluginApp */,
241 | );
242 | };
243 | /* End PBXProject section */
244 |
245 | /* Begin PBXResourcesBuildPhase section */
246 | BB8A4AB2221163E800F315B2 /* Resources */ = {
247 | isa = PBXResourcesBuildPhase;
248 | buildActionMask = 2147483647;
249 | files = (
250 | BBD22F192211676B00187B60 /* MyPlugin.bundle in Resources */,
251 | BB8A4AB9221163EC00F315B2 /* Assets.xcassets in Resources */,
252 | BB8A4ABC221163EC00F315B2 /* MainMenu.xib in Resources */,
253 | );
254 | runOnlyForDeploymentPostprocessing = 0;
255 | };
256 | BBC6E060221083E700635FD6 /* Resources */ = {
257 | isa = PBXResourcesBuildPhase;
258 | buildActionMask = 2147483647;
259 | files = (
260 | );
261 | runOnlyForDeploymentPostprocessing = 0;
262 | };
263 | /* End PBXResourcesBuildPhase section */
264 |
265 | /* Begin PBXSourcesBuildPhase section */
266 | BB8A4AB0221163E800F315B2 /* Sources */ = {
267 | isa = PBXSourcesBuildPhase;
268 | buildActionMask = 2147483647;
269 | files = (
270 | BB8A4AC22211646600F315B2 /* PluginAPI.swift in Sources */,
271 | BB8A4AB7221163E800F315B2 /* AppDelegate.swift in Sources */,
272 | );
273 | runOnlyForDeploymentPostprocessing = 0;
274 | };
275 | BBC6E0502210835600635FD6 /* Sources */ = {
276 | isa = PBXSourcesBuildPhase;
277 | buildActionMask = 2147483647;
278 | files = (
279 | BB4B11842211035F00FB6B6A /* PluginAPI.swift in Sources */,
280 | BBC6E0582210835600635FD6 /* main.swift in Sources */,
281 | );
282 | runOnlyForDeploymentPostprocessing = 0;
283 | };
284 | BBC6E05E221083E700635FD6 /* Sources */ = {
285 | isa = PBXSourcesBuildPhase;
286 | buildActionMask = 2147483647;
287 | files = (
288 | BB4B11852211035F00FB6B6A /* PluginAPI.swift in Sources */,
289 | BBC6E0692210840B00635FD6 /* MyPlugin.swift in Sources */,
290 | );
291 | runOnlyForDeploymentPostprocessing = 0;
292 | };
293 | /* End PBXSourcesBuildPhase section */
294 |
295 | /* Begin PBXTargetDependency section */
296 | BB4B117C2210856D00FB6B6A /* PBXTargetDependency */ = {
297 | isa = PBXTargetDependency;
298 | target = BBC6E061221083E700635FD6 /* MyPlugin */;
299 | targetProxy = BB4B117B2210856D00FB6B6A /* PBXContainerItemProxy */;
300 | };
301 | BB8A4AC42211652200F315B2 /* PBXTargetDependency */ = {
302 | isa = PBXTargetDependency;
303 | target = BBC6E061221083E700635FD6 /* MyPlugin */;
304 | targetProxy = BB8A4AC32211652200F315B2 /* PBXContainerItemProxy */;
305 | };
306 | /* End PBXTargetDependency section */
307 |
308 | /* Begin PBXVariantGroup section */
309 | BB8A4ABA221163EC00F315B2 /* MainMenu.xib */ = {
310 | isa = PBXVariantGroup;
311 | children = (
312 | BB8A4ABB221163EC00F315B2 /* Base */,
313 | );
314 | name = MainMenu.xib;
315 | sourceTree = "";
316 | };
317 | /* End PBXVariantGroup section */
318 |
319 | /* Begin XCBuildConfiguration section */
320 | BB8A4ABF221163EC00F315B2 /* Debug */ = {
321 | isa = XCBuildConfiguration;
322 | buildSettings = {
323 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
324 | CODE_SIGN_ENTITLEMENTS = SwiftPluginApp/SwiftPluginApp.entitlements;
325 | CODE_SIGN_STYLE = Automatic;
326 | COMBINE_HIDPI_IMAGES = YES;
327 | DEVELOPMENT_TEAM = 9V5A8WE85E;
328 | INFOPLIST_FILE = SwiftPluginApp/Info.plist;
329 | LD_RUNPATH_SEARCH_PATHS = (
330 | "$(inherited)",
331 | "@executable_path/../Frameworks",
332 | );
333 | MACOSX_DEPLOYMENT_TARGET = 10.13;
334 | PRODUCT_BUNDLE_IDENTIFIER = com.johnholdsworth.SwiftPluginApp;
335 | PRODUCT_NAME = "$(TARGET_NAME)";
336 | SWIFT_VERSION = 4.2;
337 | };
338 | name = Debug;
339 | };
340 | BB8A4AC0221163EC00F315B2 /* Release */ = {
341 | isa = XCBuildConfiguration;
342 | buildSettings = {
343 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
344 | CODE_SIGN_ENTITLEMENTS = SwiftPluginApp/SwiftPluginApp.entitlements;
345 | CODE_SIGN_STYLE = Automatic;
346 | COMBINE_HIDPI_IMAGES = YES;
347 | DEVELOPMENT_TEAM = 9V5A8WE85E;
348 | INFOPLIST_FILE = SwiftPluginApp/Info.plist;
349 | LD_RUNPATH_SEARCH_PATHS = (
350 | "$(inherited)",
351 | "@executable_path/../Frameworks",
352 | );
353 | MACOSX_DEPLOYMENT_TARGET = 10.13;
354 | PRODUCT_BUNDLE_IDENTIFIER = com.johnholdsworth.SwiftPluginApp;
355 | PRODUCT_NAME = "$(TARGET_NAME)";
356 | SWIFT_VERSION = 4.2;
357 | };
358 | name = Release;
359 | };
360 | BBC6E0592210835600635FD6 /* Debug */ = {
361 | isa = XCBuildConfiguration;
362 | buildSettings = {
363 | ALWAYS_SEARCH_USER_PATHS = NO;
364 | CLANG_ANALYZER_NONNULL = YES;
365 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
366 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
367 | CLANG_CXX_LIBRARY = "libc++";
368 | CLANG_ENABLE_MODULES = YES;
369 | CLANG_ENABLE_OBJC_ARC = YES;
370 | CLANG_ENABLE_OBJC_WEAK = YES;
371 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
372 | CLANG_WARN_BOOL_CONVERSION = YES;
373 | CLANG_WARN_COMMA = YES;
374 | CLANG_WARN_CONSTANT_CONVERSION = YES;
375 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
376 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
377 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
378 | CLANG_WARN_EMPTY_BODY = YES;
379 | CLANG_WARN_ENUM_CONVERSION = YES;
380 | CLANG_WARN_INFINITE_RECURSION = YES;
381 | CLANG_WARN_INT_CONVERSION = YES;
382 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
383 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
384 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
385 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
386 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
387 | CLANG_WARN_STRICT_PROTOTYPES = YES;
388 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
389 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
390 | CLANG_WARN_UNREACHABLE_CODE = YES;
391 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
392 | CODE_SIGN_IDENTITY = "Mac Developer";
393 | COPY_PHASE_STRIP = NO;
394 | DEBUG_INFORMATION_FORMAT = dwarf;
395 | ENABLE_STRICT_OBJC_MSGSEND = YES;
396 | ENABLE_TESTABILITY = YES;
397 | GCC_C_LANGUAGE_STANDARD = gnu11;
398 | GCC_DYNAMIC_NO_PIC = NO;
399 | GCC_NO_COMMON_BLOCKS = YES;
400 | GCC_OPTIMIZATION_LEVEL = 0;
401 | GCC_PREPROCESSOR_DEFINITIONS = (
402 | "DEBUG=1",
403 | "$(inherited)",
404 | );
405 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
406 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
407 | GCC_WARN_UNDECLARED_SELECTOR = YES;
408 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
409 | GCC_WARN_UNUSED_FUNCTION = YES;
410 | GCC_WARN_UNUSED_VARIABLE = YES;
411 | MACOSX_DEPLOYMENT_TARGET = 10.10;
412 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
413 | MTL_FAST_MATH = YES;
414 | ONLY_ACTIVE_ARCH = YES;
415 | SDKROOT = macosx;
416 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
417 | SWIFT_COMPILATION_MODE = wholemodule;
418 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
419 | };
420 | name = Debug;
421 | };
422 | BBC6E05A2210835600635FD6 /* Release */ = {
423 | isa = XCBuildConfiguration;
424 | buildSettings = {
425 | ALWAYS_SEARCH_USER_PATHS = NO;
426 | CLANG_ANALYZER_NONNULL = YES;
427 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
428 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
429 | CLANG_CXX_LIBRARY = "libc++";
430 | CLANG_ENABLE_MODULES = YES;
431 | CLANG_ENABLE_OBJC_ARC = YES;
432 | CLANG_ENABLE_OBJC_WEAK = YES;
433 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
434 | CLANG_WARN_BOOL_CONVERSION = YES;
435 | CLANG_WARN_COMMA = YES;
436 | CLANG_WARN_CONSTANT_CONVERSION = YES;
437 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
438 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
439 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
440 | CLANG_WARN_EMPTY_BODY = YES;
441 | CLANG_WARN_ENUM_CONVERSION = YES;
442 | CLANG_WARN_INFINITE_RECURSION = YES;
443 | CLANG_WARN_INT_CONVERSION = YES;
444 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
445 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
446 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
447 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
448 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
449 | CLANG_WARN_STRICT_PROTOTYPES = YES;
450 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
451 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
452 | CLANG_WARN_UNREACHABLE_CODE = YES;
453 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
454 | CODE_SIGN_IDENTITY = "Mac Developer";
455 | COPY_PHASE_STRIP = NO;
456 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
457 | ENABLE_NS_ASSERTIONS = NO;
458 | ENABLE_STRICT_OBJC_MSGSEND = YES;
459 | GCC_C_LANGUAGE_STANDARD = gnu11;
460 | GCC_NO_COMMON_BLOCKS = YES;
461 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
462 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
463 | GCC_WARN_UNDECLARED_SELECTOR = YES;
464 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
465 | GCC_WARN_UNUSED_FUNCTION = YES;
466 | GCC_WARN_UNUSED_VARIABLE = YES;
467 | MACOSX_DEPLOYMENT_TARGET = 10.10;
468 | MTL_ENABLE_DEBUG_INFO = NO;
469 | MTL_FAST_MATH = YES;
470 | SDKROOT = macosx;
471 | SWIFT_COMPILATION_MODE = wholemodule;
472 | SWIFT_OPTIMIZATION_LEVEL = "-O";
473 | };
474 | name = Release;
475 | };
476 | BBC6E05C2210835600635FD6 /* Debug */ = {
477 | isa = XCBuildConfiguration;
478 | buildSettings = {
479 | CODE_SIGN_STYLE = Automatic;
480 | DEVELOPMENT_TEAM = 9V5A8WE85E;
481 | PRODUCT_NAME = "$(TARGET_NAME)";
482 | SWIFT_VERSION = 5.0;
483 | };
484 | name = Debug;
485 | };
486 | BBC6E05D2210835600635FD6 /* Release */ = {
487 | isa = XCBuildConfiguration;
488 | buildSettings = {
489 | CODE_SIGN_STYLE = Automatic;
490 | DEVELOPMENT_TEAM = 9V5A8WE85E;
491 | PRODUCT_NAME = "$(TARGET_NAME)";
492 | SWIFT_VERSION = 5.0;
493 | };
494 | name = Release;
495 | };
496 | BBC6E066221083E700635FD6 /* Debug */ = {
497 | isa = XCBuildConfiguration;
498 | buildSettings = {
499 | CLANG_ENABLE_MODULES = YES;
500 | CODE_SIGN_STYLE = Automatic;
501 | COMBINE_HIDPI_IMAGES = YES;
502 | DEVELOPMENT_TEAM = 9V5A8WE85E;
503 | INFOPLIST_FILE = MyPlugin/Info.plist;
504 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles";
505 | LD_RUNPATH_SEARCH_PATHS = (
506 | "$(inherited)",
507 | "@executable_path/../Frameworks",
508 | "@loader_path/../Frameworks",
509 | "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx",
510 | );
511 | OTHER_LDFLAGS = (
512 | "-rpath",
513 | "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx",
514 | );
515 | PRODUCT_BUNDLE_IDENTIFIER = com.johnholdsworth.MyPlugin;
516 | PRODUCT_MODULE_NAME = SwiftPlugin;
517 | PRODUCT_NAME = "$(TARGET_NAME)";
518 | SKIP_INSTALL = YES;
519 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
520 | SWIFT_VERSION = 5.0;
521 | WRAPPER_EXTENSION = bundle;
522 | };
523 | name = Debug;
524 | };
525 | BBC6E067221083E700635FD6 /* Release */ = {
526 | isa = XCBuildConfiguration;
527 | buildSettings = {
528 | CLANG_ENABLE_MODULES = YES;
529 | CODE_SIGN_STYLE = Automatic;
530 | COMBINE_HIDPI_IMAGES = YES;
531 | DEVELOPMENT_TEAM = 9V5A8WE85E;
532 | INFOPLIST_FILE = MyPlugin/Info.plist;
533 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles";
534 | LD_RUNPATH_SEARCH_PATHS = (
535 | "$(inherited)",
536 | "@executable_path/../Frameworks",
537 | "@loader_path/../Frameworks",
538 | "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx",
539 | );
540 | OTHER_LDFLAGS = (
541 | "-rpath",
542 | "$(TOOLCHAIN_DIR)/usr/lib/swift/macosx",
543 | );
544 | PRODUCT_BUNDLE_IDENTIFIER = com.johnholdsworth.MyPlugin;
545 | PRODUCT_MODULE_NAME = SwiftPlugin;
546 | PRODUCT_NAME = "$(TARGET_NAME)";
547 | SKIP_INSTALL = YES;
548 | SWIFT_VERSION = 5.0;
549 | WRAPPER_EXTENSION = bundle;
550 | };
551 | name = Release;
552 | };
553 | /* End XCBuildConfiguration section */
554 |
555 | /* Begin XCConfigurationList section */
556 | BB8A4AC1221163EC00F315B2 /* Build configuration list for PBXNativeTarget "SwiftPluginApp" */ = {
557 | isa = XCConfigurationList;
558 | buildConfigurations = (
559 | BB8A4ABF221163EC00F315B2 /* Debug */,
560 | BB8A4AC0221163EC00F315B2 /* Release */,
561 | );
562 | defaultConfigurationIsVisible = 0;
563 | defaultConfigurationName = Release;
564 | };
565 | BBC6E04F2210835600635FD6 /* Build configuration list for PBXProject "SwiftPlugin" */ = {
566 | isa = XCConfigurationList;
567 | buildConfigurations = (
568 | BBC6E0592210835600635FD6 /* Debug */,
569 | BBC6E05A2210835600635FD6 /* Release */,
570 | );
571 | defaultConfigurationIsVisible = 0;
572 | defaultConfigurationName = Release;
573 | };
574 | BBC6E05B2210835600635FD6 /* Build configuration list for PBXNativeTarget "SwiftPlugin" */ = {
575 | isa = XCConfigurationList;
576 | buildConfigurations = (
577 | BBC6E05C2210835600635FD6 /* Debug */,
578 | BBC6E05D2210835600635FD6 /* Release */,
579 | );
580 | defaultConfigurationIsVisible = 0;
581 | defaultConfigurationName = Release;
582 | };
583 | BBC6E065221083E700635FD6 /* Build configuration list for PBXNativeTarget "MyPlugin" */ = {
584 | isa = XCConfigurationList;
585 | buildConfigurations = (
586 | BBC6E066221083E700635FD6 /* Debug */,
587 | BBC6E067221083E700635FD6 /* Release */,
588 | );
589 | defaultConfigurationIsVisible = 0;
590 | defaultConfigurationName = Release;
591 | };
592 | /* End XCConfigurationList section */
593 | };
594 | rootObject = BBC6E04C2210835600635FD6 /* Project object */;
595 | }
596 |
--------------------------------------------------------------------------------
/SwiftPluginApp/Base.lproj/MainMenu.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
681 |
682 |
683 |
684 |
685 |
686 |
687 |
688 |
689 |
690 |
691 |
692 |
693 |
--------------------------------------------------------------------------------