├── README.md
├── ZZFormatter
├── Info.plist
├── SourceEditorCommand.swift
├── SourceEditorExtension.swift
├── ZZFormatter.entitlements
├── ZZFormatterConstant.swift
└── resource
│ ├── .clang-format
│ ├── .swiftformat
│ ├── clang-format
│ └── swiftformat
├── ZZXcodeFormat.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ ├── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── xcuserdata
│ │ ├── 10088792.xcuserdatad
│ │ └── UserInterfaceState.xcuserstate
│ │ └── zmz.xcuserdatad
│ │ └── UserInterfaceState.xcuserstate
├── xcshareddata
│ └── xcschemes
│ │ ├── ZZFormatter.xcscheme
│ │ └── ZZXcodeFormat.xcscheme
└── xcuserdata
│ └── 10088792.xcuserdatad
│ ├── xcdebugger
│ └── Breakpoints_v2.xcbkptlist
│ └── xcschemes
│ └── xcschememanagement.plist
└── ZZXcodeFormat
├── AppDelegate.swift
├── Assets.xcassets
├── AccentColor.colorset
│ └── Contents.json
├── AppIcon.appiconset
│ ├── Contents.json
│ ├── 稿定设计-1.png
│ ├── 稿定设计-2 1.png
│ ├── 稿定设计-2.png
│ ├── 稿定设计-3 1.png
│ └── 稿定设计-3.png
└── Contents.json
├── Base.lproj
└── Main.storyboard
├── ViewController.swift
└── ZZXcodeFormat.entitlements
/README.md:
--------------------------------------------------------------------------------
1 | # ZZXcodeFormat
2 | V2.0.0已就位,支持MacOS 11.0以上系统。
3 |
4 | # 安装方式
5 | 1. 下载ZZXcodeFormat
6 | 2. 将两个target替换为个人证书,command+R运行
7 | 3. 进入设置 - 扩展 - ZZXcodeFormat下方可选框勾中
8 | 4. 杀掉Xcode,重新运行即可
9 |
10 | # 使用方式
11 |
12 |
13 | 安装后,插件将出现在Xcode的Editer工具栏最下方,包含两个选项:
14 | 1. 格式化当前文件
15 | 2. 格式化当前选中区域
16 |
--------------------------------------------------------------------------------
/ZZFormatter/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | NSExtension
6 |
7 | NSExtensionAttributes
8 |
9 | XCSourceEditorCommandDefinitions
10 |
11 |
12 | XCSourceEditorCommandClassName
13 | $(PRODUCT_MODULE_NAME).SourceEditorCommand
14 | XCSourceEditorCommandIdentifier
15 | $(PRODUCT_BUNDLE_IDENTIFIER).formatSelectedFile
16 | XCSourceEditorCommandName
17 | -> Current File
18 |
19 |
20 | XCSourceEditorCommandClassName
21 | $(PRODUCT_MODULE_NAME).SourceEditorCommand
22 | XCSourceEditorCommandIdentifier
23 | $(PRODUCT_BUNDLE_IDENTIFIER).formatSelectedText
24 | XCSourceEditorCommandName
25 | -> Selected Line
26 |
27 |
28 | XCSourceEditorExtensionPrincipalClass
29 | $(PRODUCT_MODULE_NAME).SourceEditorExtension
30 |
31 | NSExtensionPointIdentifier
32 | com.apple.dt.Xcode.extension.source-editor
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/ZZFormatter/SourceEditorCommand.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SourceEditorCommand.swift
3 | // ZZFormatter
4 | //
5 | // Created by Yem Zhou on 2023/10/22.
6 | //
7 |
8 | import Foundation
9 | import UniformTypeIdentifiers
10 | import XcodeKit
11 |
12 | class SourceEditorCommand: NSObject, XCSourceEditorCommand {
13 | func perform(with invocation: XCSourceEditorCommandInvocation, completionHandler: @escaping (Error?) -> Void) {
14 | // 提取
15 | guard let tail = invocation.commandIdentifier.components(separatedBy: ".").last, let id = ZZXcodeFormatID(rawValue: tail) else {
16 | completionHandler(nil)
17 | return
18 | }
19 |
20 | let buffer = invocation.buffer
21 | let parserType = buffer.parserType // 解析器类型
22 | let sections = id == .text ? buffer.selections as? [XCSourceTextRange] : nil // 被选中的文本
23 |
24 | var running = true
25 | format(parserType: parserType, sourceText: buffer.completeBuffer, selections: sections) { result in
26 | switch result {
27 | case .succeed(let text):
28 | buffer.lines.removeAllObjects()
29 | buffer.completeBuffer = text
30 | print("格式化完成")
31 | case .error(let desc):
32 | print("格式化失败:\(desc)")
33 | }
34 | completionHandler(nil)
35 | running = false
36 | }
37 |
38 | // 10s还未执行完,则停止
39 | DispatchQueue.global().asyncAfter(deadline: .now() + 10, execute: DispatchWorkItem(block: {
40 | if running {
41 | completionHandler(nil)
42 | running = false
43 | }
44 | }))
45 | }
46 | }
47 |
48 | extension SourceEditorCommand {
49 | private func format(parserType: ZZXcodeFormatType, sourceText: String, selections: [XCSourceTextRange]?, completed: (ZZXcodeFormatResult) -> Void) {
50 | switch parserType {
51 | case .none:
52 | completed(.error("未识别的文件类型"))
53 | case .swift:
54 | self.formatTask(info: self.swiftTaskInfo(selections: selections), sourceText: sourceText, completed: completed)
55 | case .oc:
56 | self.formatTask(info: self.ocTaskInfo(selections: selections), sourceText: sourceText, completed: completed)
57 | }
58 | }
59 |
60 | private func formatTask(info: ZZXcodeFormatTaskInfo, sourceText: String, completed: (ZZXcodeFormatResult) -> Void) {
61 | if let message = info.errorMessage {
62 | completed(.error(message))
63 | return
64 | }
65 | guard let excuteUrl = info.excuteURL else {
66 | completed(.error("参数异常"))
67 | return
68 | }
69 |
70 | let inputPipe = Pipe()
71 | let outputPipe = Pipe()
72 | let task = Process()
73 | task.standardInput = inputPipe
74 | task.standardOutput = outputPipe
75 | task.executableURL = excuteUrl
76 | if let args = info.args {
77 | task.arguments = args
78 | }
79 |
80 | do {
81 | try task.run()
82 | } catch {
83 | completed(.error(error.localizedDescription))
84 | return
85 | }
86 |
87 | // 向命令的标准输入写入输入文本
88 | guard let inputData = sourceText.data(using: .utf8) else {
89 | completed(.error("输入文件非utf8"))
90 | return
91 | }
92 | inputPipe.fileHandleForWriting.write(inputData)
93 | inputPipe.fileHandleForWriting.closeFile()
94 |
95 | // 读取命令的标准输出
96 | guard let data = try? outputPipe.fileHandleForReading.readToEnd(),
97 | let formattedString = String(data: data, encoding: .utf8),
98 | !formattedString.isEmpty
99 | else {
100 | try? outputPipe.fileHandleForReading.close()
101 | completed(.error("导出空文件"))
102 | return
103 | }
104 | guard formattedString != sourceText else {
105 | completed(.error("无变化"))
106 | return
107 | }
108 | try? outputPipe.fileHandleForReading.close()
109 | completed(.succeed(formattedString))
110 | }
111 |
112 | private func ocTaskInfo(selections: [XCSourceTextRange]?) -> ZZXcodeFormatTaskInfo {
113 | guard let url = Bundle.main.url(forResource: "clang-format", withExtension: nil) else {
114 | return ("找不到clang-format", nil, nil)
115 | }
116 | guard let style = Bundle.main.path(forResource: ".clang-format", ofType: nil) else {
117 | return ("找不到.clang-format", nil, nil)
118 | }
119 |
120 | var arguments = ["-style=file:\(style)"]
121 | if let selections {
122 | for r in selections {
123 | arguments.append("-linerange=\(r.start.line):\(r.end.line)")
124 | }
125 | }
126 | return (nil, url, arguments)
127 | }
128 |
129 | private func swiftTaskInfo(selections: [XCSourceTextRange]?) -> ZZXcodeFormatTaskInfo {
130 | guard let url = Bundle.main.url(forResource: "swiftformat", withExtension: nil) else {
131 | return ("找不到swiftFormat", nil, nil)
132 | }
133 | guard let style = Bundle.main.path(forResource: ".swiftformat", ofType: nil) else {
134 | return ("找不到.swiftFormat", nil, nil)
135 | }
136 |
137 | var arguments = ["-config", style]
138 | if let selections {
139 | for r in selections {
140 | arguments.append("-linerange")
141 | arguments.append("\(r.start.line + 1),\(r.end.line + 1)")
142 | }
143 | }
144 | return (nil, url, arguments)
145 | }
146 | }
147 |
148 | // MARK: - 文件类型
149 |
150 | extension XCSourceTextBuffer {
151 | /// 已知UTIS
152 | enum ZZCodeFormatUTIs {
153 | static let ocSet: Set = [.objectiveCSource, .objectiveCPlusPlusSource, .cHeader, .cSource, .cPlusPlusSource]
154 | static let swiftSet: Set = [.swiftSource]
155 | }
156 |
157 | /// 根据UTI判断格式化策略
158 | var parserType: ZZXcodeFormatType {
159 | if let cur = UTType(contentUTI) {
160 | if ZZCodeFormatUTIs.ocSet.contains(cur) {
161 | return .oc
162 | }
163 | if ZZCodeFormatUTIs.swiftSet.contains(cur) {
164 | return .swift
165 | }
166 | }
167 | return .none
168 | }
169 | }
170 |
--------------------------------------------------------------------------------
/ZZFormatter/SourceEditorExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SourceEditorExtension.swift
3 | // ZZFormatter
4 | //
5 | // Created by Yem Zhou on 2023/10/22.
6 | //
7 |
8 | import Foundation
9 | import XcodeKit
10 |
11 | class SourceEditorExtension: NSObject, XCSourceEditorExtension {
12 |
13 | func extensionDidFinishLaunching() {
14 | print("加载插件ZZFormatter成功: \(Bundle.main.executablePath ?? "")")
15 | }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/ZZFormatter/ZZFormatter.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ZZFormatter/ZZFormatterConstant.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ZZFormatterConstant.swift
3 | // ZZFormatter
4 | //
5 | // Created by Yem Zhou on 2023/10/22.
6 | //
7 |
8 | import Foundation
9 |
10 | enum ZZXcodeFormatID: String {
11 | case text = "formatSelectedText"
12 | case file = "formatSelectedFile"
13 | }
14 |
15 | enum ZZXcodeFormatType {
16 | case none
17 | case oc
18 | case swift
19 | }
20 |
21 | enum ZZXcodeFormatResult {
22 | case succeed(String)
23 | case error(String)
24 | }
25 |
26 | typealias ZZXcodeFormatTaskInfo = (errorMessage: String?, excuteURL: URL?, args: [String]?)
27 |
--------------------------------------------------------------------------------
/ZZFormatter/resource/.clang-format:
--------------------------------------------------------------------------------
1 | ######################## 基础设置 #########################
2 |
3 | # 基础样式
4 | BasedOnStyle: LLVM
5 |
6 | # 最多保留空行数
7 | MaxEmptyLinesToKeep: 1
8 |
9 | # 每行字符的限制,0表示没有限制
10 | ColumnLimit: 120
11 |
12 | # include排序
13 | SortIncludes: true
14 |
15 | ######################## 空格设置 #########################
16 |
17 | # 在ObjC的@property后添加一个空格
18 | ObjCSpaceAfterProperty: true
19 |
20 | # 在ObjC的protocol列表前添加一个空格
21 | ObjCSpaceBeforeProtocolList: true
22 |
23 | # 运算符左右添加空格
24 | SpaceBeforeAssignmentOperators: true
25 |
26 | # 括号前空格 (Never/ControlStatements控制语句/Always)
27 | SpaceBeforeParens: ControlStatements
28 |
29 | # 容器内空格,如数组/字典
30 | SpacesInContainerLiterals: true
31 |
32 | ######################## 换行方式 #########################
33 |
34 | # 允许短的块放在同一行
35 | AllowShortBlocksOnASingleLine: false
36 |
37 | # 允许短的case标签放在同一行
38 | AllowShortCaseLabelsOnASingleLine: false
39 |
40 | # 允许短的函数放在同一行. None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), All
41 | AllowShortFunctionsOnASingleLine: Empty
42 |
43 | # 允许短的if语句保持在同一行
44 | AllowShortIfStatementsOnASingleLine: false
45 |
46 | # 允许短的循环保持在同一行,如while(1) ccc();
47 | AllowShortLoopsOnASingleLine: false
48 |
49 | # 函数声名太长时,参数换行
50 | AllowAllParametersOfDeclarationOnNextLine: true
51 |
52 | ######################## 对齐方式 #########################
53 |
54 | # 对齐连续的尾随的注释
55 | AlignTrailingComments: true
56 |
57 | # 指针星号位置(Left/Right/Middle)
58 | PointerAlignment: Right
59 |
60 | # 多行赋值时,以等号对齐
61 | AlignConsecutiveAssignments: false
62 |
63 | ######################## 缩进方式 #########################
64 |
65 | # 缩进列数
66 | IndentWidth: 4
67 |
68 | # 制表符Tab宽度
69 | TabWidth: 4
70 |
71 | # block块缩进
72 | ObjCBlockIndentWidth: 4
73 |
74 | # switch语句,是否case缩进
75 | IndentCaseLabels: true
76 |
--------------------------------------------------------------------------------
/ZZFormatter/resource/.swiftformat:
--------------------------------------------------------------------------------
1 |
2 | # swift版本号(必填)
3 | --swiftversion 5.1
4 |
5 | # 多参数换行
6 | --wraparguments before-first
7 | --wrapparameters before-first
8 |
9 | # 超行宽换行
10 | --maxwidth 140
11 |
12 | # else前后不换行
13 | --guardelse same-line
14 | --elseposition same-line
15 |
16 | # 移除非必要self
17 | --self remove
18 |
19 | # 移除可推断类型声名
20 | --redundanttype inferred
21 |
22 | # 移除多余空行
23 | # 默认值
24 |
25 | # 移除行尾空字符
26 | --trimwhitespace always
27 |
28 | # @objc位置
29 | --funcattributes same-line
30 | --typeattributes same-line
31 | --varattributes same-line
32 |
33 | --enable blankLineAfterImports,blockComments,docComments,andOperator
34 |
--------------------------------------------------------------------------------
/ZZFormatter/resource/clang-format:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/V5zhou/ZZXcodeFormat/9625cc20465d2115e4d7050dba0e0ec112c21126/ZZFormatter/resource/clang-format
--------------------------------------------------------------------------------
/ZZFormatter/resource/swiftformat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/V5zhou/ZZXcodeFormat/9625cc20465d2115e4d7050dba0e0ec112c21126/ZZFormatter/resource/swiftformat
--------------------------------------------------------------------------------
/ZZXcodeFormat.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 56;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 30193D1E2AE50E5E0028FC53 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30193D1D2AE50E5E0028FC53 /* AppDelegate.swift */; };
11 | 30193D202AE50E5E0028FC53 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30193D1F2AE50E5E0028FC53 /* ViewController.swift */; };
12 | 30193D222AE50E5F0028FC53 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 30193D212AE50E5F0028FC53 /* Assets.xcassets */; };
13 | 30193D252AE50E5F0028FC53 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 30193D232AE50E5F0028FC53 /* Main.storyboard */; };
14 | 30193D382AE50EE10028FC53 /* SourceEditorExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30193D372AE50EE10028FC53 /* SourceEditorExtension.swift */; };
15 | 30193D3A2AE50EE10028FC53 /* SourceEditorCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30193D392AE50EE10028FC53 /* SourceEditorCommand.swift */; };
16 | 30193D3F2AE50EE10028FC53 /* ZZFormatter.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 30193D302AE50EE10028FC53 /* ZZFormatter.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
17 | 30193D452AE5101F0028FC53 /* ZZFormatterConstant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30193D442AE5101F0028FC53 /* ZZFormatterConstant.swift */; };
18 | 30193D462AE51FE70028FC53 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 30193D322AE50EE10028FC53 /* Cocoa.framework */; };
19 | 30193D482AE51FEC0028FC53 /* XcodeKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 30193D472AE51FEC0028FC53 /* XcodeKit.framework */; };
20 | 30193D492AE51FEC0028FC53 /* XcodeKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 30193D472AE51FEC0028FC53 /* XcodeKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
21 | 30193D502AE521070028FC53 /* clang-format in Resources */ = {isa = PBXBuildFile; fileRef = 30193D4E2AE521070028FC53 /* clang-format */; };
22 | 30193D512AE521070028FC53 /* .clang-format in Resources */ = {isa = PBXBuildFile; fileRef = 30193D4F2AE521070028FC53 /* .clang-format */; };
23 | 30193D532AE522370028FC53 /* .swiftformat in Resources */ = {isa = PBXBuildFile; fileRef = 30193D522AE522370028FC53 /* .swiftformat */; };
24 | 30193D682AE54F250028FC53 /* swiftformat in Resources */ = {isa = PBXBuildFile; fileRef = 30193D672AE54F250028FC53 /* swiftformat */; };
25 | /* End PBXBuildFile section */
26 |
27 | /* Begin PBXContainerItemProxy section */
28 | 30193D3D2AE50EE10028FC53 /* PBXContainerItemProxy */ = {
29 | isa = PBXContainerItemProxy;
30 | containerPortal = 30193D122AE50E5E0028FC53 /* Project object */;
31 | proxyType = 1;
32 | remoteGlobalIDString = 30193D2F2AE50EE10028FC53;
33 | remoteInfo = ZZFormatter;
34 | };
35 | /* End PBXContainerItemProxy section */
36 |
37 | /* Begin PBXCopyFilesBuildPhase section */
38 | 30193D432AE50EE10028FC53 /* Embed Foundation Extensions */ = {
39 | isa = PBXCopyFilesBuildPhase;
40 | buildActionMask = 2147483647;
41 | dstPath = "";
42 | dstSubfolderSpec = 13;
43 | files = (
44 | 30193D3F2AE50EE10028FC53 /* ZZFormatter.appex in Embed Foundation Extensions */,
45 | );
46 | name = "Embed Foundation Extensions";
47 | runOnlyForDeploymentPostprocessing = 0;
48 | };
49 | 30193D4A2AE51FEC0028FC53 /* Embed Frameworks */ = {
50 | isa = PBXCopyFilesBuildPhase;
51 | buildActionMask = 2147483647;
52 | dstPath = "";
53 | dstSubfolderSpec = 10;
54 | files = (
55 | 30193D492AE51FEC0028FC53 /* XcodeKit.framework in Embed Frameworks */,
56 | );
57 | name = "Embed Frameworks";
58 | runOnlyForDeploymentPostprocessing = 0;
59 | };
60 | /* End PBXCopyFilesBuildPhase section */
61 |
62 | /* Begin PBXFileReference section */
63 | 30193D1A2AE50E5E0028FC53 /* ZZXcodeFormat.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ZZXcodeFormat.app; sourceTree = BUILT_PRODUCTS_DIR; };
64 | 30193D1D2AE50E5E0028FC53 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
65 | 30193D1F2AE50E5E0028FC53 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
66 | 30193D212AE50E5F0028FC53 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
67 | 30193D242AE50E5F0028FC53 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
68 | 30193D262AE50E5F0028FC53 /* ZZXcodeFormat.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ZZXcodeFormat.entitlements; sourceTree = ""; };
69 | 30193D302AE50EE10028FC53 /* ZZFormatter.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = ZZFormatter.appex; sourceTree = BUILT_PRODUCTS_DIR; };
70 | 30193D322AE50EE10028FC53 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
71 | 30193D342AE50EE10028FC53 /* XcodeKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XcodeKit.framework; path = Library/Frameworks/XcodeKit.framework; sourceTree = DEVELOPER_DIR; };
72 | 30193D372AE50EE10028FC53 /* SourceEditorExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SourceEditorExtension.swift; sourceTree = ""; };
73 | 30193D392AE50EE10028FC53 /* SourceEditorCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SourceEditorCommand.swift; sourceTree = ""; };
74 | 30193D3B2AE50EE10028FC53 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
75 | 30193D3C2AE50EE10028FC53 /* ZZFormatter.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ZZFormatter.entitlements; sourceTree = ""; };
76 | 30193D442AE5101F0028FC53 /* ZZFormatterConstant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZZFormatterConstant.swift; sourceTree = ""; };
77 | 30193D472AE51FEC0028FC53 /* XcodeKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XcodeKit.framework; path = Library/Frameworks/XcodeKit.framework; sourceTree = DEVELOPER_DIR; };
78 | 30193D4E2AE521070028FC53 /* clang-format */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = "clang-format"; sourceTree = ""; };
79 | 30193D4F2AE521070028FC53 /* .clang-format */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ".clang-format"; sourceTree = ""; };
80 | 30193D522AE522370028FC53 /* .swiftformat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .swiftformat; sourceTree = ""; };
81 | 30193D672AE54F250028FC53 /* swiftformat */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = swiftformat; sourceTree = ""; };
82 | /* End PBXFileReference section */
83 |
84 | /* Begin PBXFrameworksBuildPhase section */
85 | 30193D172AE50E5E0028FC53 /* Frameworks */ = {
86 | isa = PBXFrameworksBuildPhase;
87 | buildActionMask = 2147483647;
88 | files = (
89 | );
90 | runOnlyForDeploymentPostprocessing = 0;
91 | };
92 | 30193D2D2AE50EE10028FC53 /* Frameworks */ = {
93 | isa = PBXFrameworksBuildPhase;
94 | buildActionMask = 2147483647;
95 | files = (
96 | 30193D462AE51FE70028FC53 /* Cocoa.framework in Frameworks */,
97 | 30193D482AE51FEC0028FC53 /* XcodeKit.framework in Frameworks */,
98 | );
99 | runOnlyForDeploymentPostprocessing = 0;
100 | };
101 | /* End PBXFrameworksBuildPhase section */
102 |
103 | /* Begin PBXGroup section */
104 | 30193D112AE50E5E0028FC53 = {
105 | isa = PBXGroup;
106 | children = (
107 | 30193D1C2AE50E5E0028FC53 /* ZZXcodeFormat */,
108 | 30193D362AE50EE10028FC53 /* ZZFormatter */,
109 | 30193D312AE50EE10028FC53 /* Frameworks */,
110 | 30193D1B2AE50E5E0028FC53 /* Products */,
111 | );
112 | sourceTree = "";
113 | };
114 | 30193D1B2AE50E5E0028FC53 /* Products */ = {
115 | isa = PBXGroup;
116 | children = (
117 | 30193D1A2AE50E5E0028FC53 /* ZZXcodeFormat.app */,
118 | 30193D302AE50EE10028FC53 /* ZZFormatter.appex */,
119 | );
120 | name = Products;
121 | sourceTree = "";
122 | };
123 | 30193D1C2AE50E5E0028FC53 /* ZZXcodeFormat */ = {
124 | isa = PBXGroup;
125 | children = (
126 | 30193D1D2AE50E5E0028FC53 /* AppDelegate.swift */,
127 | 30193D1F2AE50E5E0028FC53 /* ViewController.swift */,
128 | 30193D212AE50E5F0028FC53 /* Assets.xcassets */,
129 | 30193D232AE50E5F0028FC53 /* Main.storyboard */,
130 | 30193D262AE50E5F0028FC53 /* ZZXcodeFormat.entitlements */,
131 | );
132 | path = ZZXcodeFormat;
133 | sourceTree = "";
134 | };
135 | 30193D312AE50EE10028FC53 /* Frameworks */ = {
136 | isa = PBXGroup;
137 | children = (
138 | 30193D472AE51FEC0028FC53 /* XcodeKit.framework */,
139 | 30193D322AE50EE10028FC53 /* Cocoa.framework */,
140 | 30193D342AE50EE10028FC53 /* XcodeKit.framework */,
141 | );
142 | name = Frameworks;
143 | sourceTree = "";
144 | };
145 | 30193D362AE50EE10028FC53 /* ZZFormatter */ = {
146 | isa = PBXGroup;
147 | children = (
148 | 30193D372AE50EE10028FC53 /* SourceEditorExtension.swift */,
149 | 30193D392AE50EE10028FC53 /* SourceEditorCommand.swift */,
150 | 30193D442AE5101F0028FC53 /* ZZFormatterConstant.swift */,
151 | 30193D3B2AE50EE10028FC53 /* Info.plist */,
152 | 30193D3C2AE50EE10028FC53 /* ZZFormatter.entitlements */,
153 | 30193D4B2AE520990028FC53 /* resource */,
154 | );
155 | path = ZZFormatter;
156 | sourceTree = "";
157 | };
158 | 30193D4B2AE520990028FC53 /* resource */ = {
159 | isa = PBXGroup;
160 | children = (
161 | 30193D672AE54F250028FC53 /* swiftformat */,
162 | 30193D522AE522370028FC53 /* .swiftformat */,
163 | 30193D4F2AE521070028FC53 /* .clang-format */,
164 | 30193D4E2AE521070028FC53 /* clang-format */,
165 | );
166 | path = resource;
167 | sourceTree = "";
168 | };
169 | /* End PBXGroup section */
170 |
171 | /* Begin PBXNativeTarget section */
172 | 30193D192AE50E5E0028FC53 /* ZZXcodeFormat */ = {
173 | isa = PBXNativeTarget;
174 | buildConfigurationList = 30193D292AE50E5F0028FC53 /* Build configuration list for PBXNativeTarget "ZZXcodeFormat" */;
175 | buildPhases = (
176 | 30193D162AE50E5E0028FC53 /* Sources */,
177 | 30193D172AE50E5E0028FC53 /* Frameworks */,
178 | 30193D182AE50E5E0028FC53 /* Resources */,
179 | 30193D432AE50EE10028FC53 /* Embed Foundation Extensions */,
180 | 30DD73C72AEA50CE006BA7B3 /* install application */,
181 | );
182 | buildRules = (
183 | );
184 | dependencies = (
185 | 30193D3E2AE50EE10028FC53 /* PBXTargetDependency */,
186 | );
187 | name = ZZXcodeFormat;
188 | productName = ZZXcodeFormat;
189 | productReference = 30193D1A2AE50E5E0028FC53 /* ZZXcodeFormat.app */;
190 | productType = "com.apple.product-type.application";
191 | };
192 | 30193D2F2AE50EE10028FC53 /* ZZFormatter */ = {
193 | isa = PBXNativeTarget;
194 | buildConfigurationList = 30193D402AE50EE10028FC53 /* Build configuration list for PBXNativeTarget "ZZFormatter" */;
195 | buildPhases = (
196 | 30193D2C2AE50EE10028FC53 /* Sources */,
197 | 30193D2D2AE50EE10028FC53 /* Frameworks */,
198 | 30193D2E2AE50EE10028FC53 /* Resources */,
199 | 30193D4A2AE51FEC0028FC53 /* Embed Frameworks */,
200 | );
201 | buildRules = (
202 | );
203 | dependencies = (
204 | );
205 | name = ZZFormatter;
206 | productName = ZZFormatter;
207 | productReference = 30193D302AE50EE10028FC53 /* ZZFormatter.appex */;
208 | productType = "com.apple.product-type.xcode-extension";
209 | };
210 | /* End PBXNativeTarget section */
211 |
212 | /* Begin PBXProject section */
213 | 30193D122AE50E5E0028FC53 /* Project object */ = {
214 | isa = PBXProject;
215 | attributes = {
216 | BuildIndependentTargetsInParallel = 1;
217 | LastSwiftUpdateCheck = 1410;
218 | LastUpgradeCheck = 1410;
219 | TargetAttributes = {
220 | 30193D192AE50E5E0028FC53 = {
221 | CreatedOnToolsVersion = 14.1;
222 | };
223 | 30193D2F2AE50EE10028FC53 = {
224 | CreatedOnToolsVersion = 14.1;
225 | };
226 | };
227 | };
228 | buildConfigurationList = 30193D152AE50E5E0028FC53 /* Build configuration list for PBXProject "ZZXcodeFormat" */;
229 | compatibilityVersion = "Xcode 14.0";
230 | developmentRegion = en;
231 | hasScannedForEncodings = 0;
232 | knownRegions = (
233 | en,
234 | Base,
235 | );
236 | mainGroup = 30193D112AE50E5E0028FC53;
237 | productRefGroup = 30193D1B2AE50E5E0028FC53 /* Products */;
238 | projectDirPath = "";
239 | projectRoot = "";
240 | targets = (
241 | 30193D192AE50E5E0028FC53 /* ZZXcodeFormat */,
242 | 30193D2F2AE50EE10028FC53 /* ZZFormatter */,
243 | );
244 | };
245 | /* End PBXProject section */
246 |
247 | /* Begin PBXResourcesBuildPhase section */
248 | 30193D182AE50E5E0028FC53 /* Resources */ = {
249 | isa = PBXResourcesBuildPhase;
250 | buildActionMask = 2147483647;
251 | files = (
252 | 30193D222AE50E5F0028FC53 /* Assets.xcassets in Resources */,
253 | 30193D252AE50E5F0028FC53 /* Main.storyboard in Resources */,
254 | );
255 | runOnlyForDeploymentPostprocessing = 0;
256 | };
257 | 30193D2E2AE50EE10028FC53 /* Resources */ = {
258 | isa = PBXResourcesBuildPhase;
259 | buildActionMask = 2147483647;
260 | files = (
261 | 30193D532AE522370028FC53 /* .swiftformat in Resources */,
262 | 30193D682AE54F250028FC53 /* swiftformat in Resources */,
263 | 30193D512AE521070028FC53 /* .clang-format in Resources */,
264 | 30193D502AE521070028FC53 /* clang-format in Resources */,
265 | );
266 | runOnlyForDeploymentPostprocessing = 0;
267 | };
268 | /* End PBXResourcesBuildPhase section */
269 |
270 | /* Begin PBXShellScriptBuildPhase section */
271 | 30DD73C72AEA50CE006BA7B3 /* install application */ = {
272 | isa = PBXShellScriptBuildPhase;
273 | buildActionMask = 2147483647;
274 | files = (
275 | );
276 | inputFileListPaths = (
277 | );
278 | inputPaths = (
279 | );
280 | name = "install application";
281 | outputFileListPaths = (
282 | );
283 | outputPaths = (
284 | );
285 | runOnlyForDeploymentPostprocessing = 0;
286 | shellPath = /bin/sh;
287 | shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\n# 创建链接\nif [ ! -d /Applications/$FULL_PRODUCT_NAME ]; then\n ln -s $BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME /Applications/$FULL_PRODUCT_NAME\n echo \"创建软链接成功\"\nfi\n";
288 | };
289 | /* End PBXShellScriptBuildPhase section */
290 |
291 | /* Begin PBXSourcesBuildPhase section */
292 | 30193D162AE50E5E0028FC53 /* Sources */ = {
293 | isa = PBXSourcesBuildPhase;
294 | buildActionMask = 2147483647;
295 | files = (
296 | 30193D202AE50E5E0028FC53 /* ViewController.swift in Sources */,
297 | 30193D1E2AE50E5E0028FC53 /* AppDelegate.swift in Sources */,
298 | );
299 | runOnlyForDeploymentPostprocessing = 0;
300 | };
301 | 30193D2C2AE50EE10028FC53 /* Sources */ = {
302 | isa = PBXSourcesBuildPhase;
303 | buildActionMask = 2147483647;
304 | files = (
305 | 30193D382AE50EE10028FC53 /* SourceEditorExtension.swift in Sources */,
306 | 30193D3A2AE50EE10028FC53 /* SourceEditorCommand.swift in Sources */,
307 | 30193D452AE5101F0028FC53 /* ZZFormatterConstant.swift in Sources */,
308 | );
309 | runOnlyForDeploymentPostprocessing = 0;
310 | };
311 | /* End PBXSourcesBuildPhase section */
312 |
313 | /* Begin PBXTargetDependency section */
314 | 30193D3E2AE50EE10028FC53 /* PBXTargetDependency */ = {
315 | isa = PBXTargetDependency;
316 | target = 30193D2F2AE50EE10028FC53 /* ZZFormatter */;
317 | targetProxy = 30193D3D2AE50EE10028FC53 /* PBXContainerItemProxy */;
318 | };
319 | /* End PBXTargetDependency section */
320 |
321 | /* Begin PBXVariantGroup section */
322 | 30193D232AE50E5F0028FC53 /* Main.storyboard */ = {
323 | isa = PBXVariantGroup;
324 | children = (
325 | 30193D242AE50E5F0028FC53 /* Base */,
326 | );
327 | name = Main.storyboard;
328 | sourceTree = "";
329 | };
330 | /* End PBXVariantGroup section */
331 |
332 | /* Begin XCBuildConfiguration section */
333 | 30193D272AE50E5F0028FC53 /* Debug */ = {
334 | isa = XCBuildConfiguration;
335 | buildSettings = {
336 | ALWAYS_SEARCH_USER_PATHS = NO;
337 | CLANG_ANALYZER_NONNULL = YES;
338 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
339 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
340 | CLANG_ENABLE_MODULES = YES;
341 | CLANG_ENABLE_OBJC_ARC = YES;
342 | CLANG_ENABLE_OBJC_WEAK = YES;
343 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
344 | CLANG_WARN_BOOL_CONVERSION = YES;
345 | CLANG_WARN_COMMA = YES;
346 | CLANG_WARN_CONSTANT_CONVERSION = YES;
347 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
348 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
349 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
350 | CLANG_WARN_EMPTY_BODY = YES;
351 | CLANG_WARN_ENUM_CONVERSION = YES;
352 | CLANG_WARN_INFINITE_RECURSION = YES;
353 | CLANG_WARN_INT_CONVERSION = YES;
354 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
355 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
356 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
357 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
358 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
359 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
360 | CLANG_WARN_STRICT_PROTOTYPES = YES;
361 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
362 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
363 | CLANG_WARN_UNREACHABLE_CODE = YES;
364 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
365 | COPY_PHASE_STRIP = NO;
366 | DEBUG_INFORMATION_FORMAT = dwarf;
367 | ENABLE_STRICT_OBJC_MSGSEND = YES;
368 | ENABLE_TESTABILITY = YES;
369 | GCC_C_LANGUAGE_STANDARD = gnu11;
370 | GCC_DYNAMIC_NO_PIC = NO;
371 | GCC_NO_COMMON_BLOCKS = YES;
372 | GCC_OPTIMIZATION_LEVEL = 0;
373 | GCC_PREPROCESSOR_DEFINITIONS = (
374 | "DEBUG=1",
375 | "$(inherited)",
376 | );
377 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
378 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
379 | GCC_WARN_UNDECLARED_SELECTOR = YES;
380 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
381 | GCC_WARN_UNUSED_FUNCTION = YES;
382 | GCC_WARN_UNUSED_VARIABLE = YES;
383 | MACOSX_DEPLOYMENT_TARGET = 13.0;
384 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
385 | MTL_FAST_MATH = YES;
386 | ONLY_ACTIVE_ARCH = YES;
387 | SDKROOT = macosx;
388 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
389 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
390 | };
391 | name = Debug;
392 | };
393 | 30193D282AE50E5F0028FC53 /* Release */ = {
394 | isa = XCBuildConfiguration;
395 | buildSettings = {
396 | ALWAYS_SEARCH_USER_PATHS = NO;
397 | CLANG_ANALYZER_NONNULL = YES;
398 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
399 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
400 | CLANG_ENABLE_MODULES = YES;
401 | CLANG_ENABLE_OBJC_ARC = YES;
402 | CLANG_ENABLE_OBJC_WEAK = YES;
403 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
404 | CLANG_WARN_BOOL_CONVERSION = YES;
405 | CLANG_WARN_COMMA = YES;
406 | CLANG_WARN_CONSTANT_CONVERSION = YES;
407 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
408 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
409 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
410 | CLANG_WARN_EMPTY_BODY = YES;
411 | CLANG_WARN_ENUM_CONVERSION = YES;
412 | CLANG_WARN_INFINITE_RECURSION = YES;
413 | CLANG_WARN_INT_CONVERSION = YES;
414 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
415 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
416 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
417 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
418 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
419 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
420 | CLANG_WARN_STRICT_PROTOTYPES = YES;
421 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
422 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
423 | CLANG_WARN_UNREACHABLE_CODE = YES;
424 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
425 | COPY_PHASE_STRIP = NO;
426 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
427 | ENABLE_NS_ASSERTIONS = NO;
428 | ENABLE_STRICT_OBJC_MSGSEND = YES;
429 | GCC_C_LANGUAGE_STANDARD = gnu11;
430 | GCC_NO_COMMON_BLOCKS = YES;
431 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
432 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
433 | GCC_WARN_UNDECLARED_SELECTOR = YES;
434 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
435 | GCC_WARN_UNUSED_FUNCTION = YES;
436 | GCC_WARN_UNUSED_VARIABLE = YES;
437 | MACOSX_DEPLOYMENT_TARGET = 13.0;
438 | MTL_ENABLE_DEBUG_INFO = NO;
439 | MTL_FAST_MATH = YES;
440 | SDKROOT = macosx;
441 | SWIFT_COMPILATION_MODE = wholemodule;
442 | SWIFT_OPTIMIZATION_LEVEL = "-O";
443 | };
444 | name = Release;
445 | };
446 | 30193D2A2AE50E5F0028FC53 /* Debug */ = {
447 | isa = XCBuildConfiguration;
448 | buildSettings = {
449 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
450 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
451 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
452 | CODE_SIGN_ENTITLEMENTS = ZZXcodeFormat/ZZXcodeFormat.entitlements;
453 | CODE_SIGN_STYLE = Automatic;
454 | COMBINE_HIDPI_IMAGES = YES;
455 | CURRENT_PROJECT_VERSION = 1;
456 | DEVELOPMENT_TEAM = YH6XM8252K;
457 | ENABLE_HARDENED_RUNTIME = YES;
458 | GENERATE_INFOPLIST_FILE = YES;
459 | INFOPLIST_KEY_CFBundleDisplayName = "格式化";
460 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
461 | INFOPLIST_KEY_NSMainStoryboardFile = Main;
462 | INFOPLIST_KEY_NSPrincipalClass = NSApplication;
463 | LD_RUNPATH_SEARCH_PATHS = (
464 | "$(inherited)",
465 | "@executable_path/../Frameworks",
466 | );
467 | MACOSX_DEPLOYMENT_TARGET = 11.0;
468 | MARKETING_VERSION = 1.0;
469 | PRODUCT_BUNDLE_IDENTIFIER = shein.ZZXcodeFormat;
470 | PRODUCT_NAME = "$(TARGET_NAME)";
471 | SWIFT_EMIT_LOC_STRINGS = YES;
472 | SWIFT_VERSION = 5.0;
473 | };
474 | name = Debug;
475 | };
476 | 30193D2B2AE50E5F0028FC53 /* Release */ = {
477 | isa = XCBuildConfiguration;
478 | buildSettings = {
479 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
480 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
481 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
482 | CODE_SIGN_ENTITLEMENTS = ZZXcodeFormat/ZZXcodeFormat.entitlements;
483 | CODE_SIGN_STYLE = Automatic;
484 | COMBINE_HIDPI_IMAGES = YES;
485 | CURRENT_PROJECT_VERSION = 1;
486 | DEVELOPMENT_TEAM = YH6XM8252K;
487 | ENABLE_HARDENED_RUNTIME = YES;
488 | GENERATE_INFOPLIST_FILE = YES;
489 | INFOPLIST_KEY_CFBundleDisplayName = "格式化";
490 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
491 | INFOPLIST_KEY_NSMainStoryboardFile = Main;
492 | INFOPLIST_KEY_NSPrincipalClass = NSApplication;
493 | LD_RUNPATH_SEARCH_PATHS = (
494 | "$(inherited)",
495 | "@executable_path/../Frameworks",
496 | );
497 | MACOSX_DEPLOYMENT_TARGET = 11.0;
498 | MARKETING_VERSION = 1.0;
499 | PRODUCT_BUNDLE_IDENTIFIER = shein.ZZXcodeFormat;
500 | PRODUCT_NAME = "$(TARGET_NAME)";
501 | SWIFT_EMIT_LOC_STRINGS = YES;
502 | SWIFT_VERSION = 5.0;
503 | };
504 | name = Release;
505 | };
506 | 30193D412AE50EE10028FC53 /* Debug */ = {
507 | isa = XCBuildConfiguration;
508 | buildSettings = {
509 | CODE_SIGN_ENTITLEMENTS = ZZFormatter/ZZFormatter.entitlements;
510 | CODE_SIGN_STYLE = Automatic;
511 | COMBINE_HIDPI_IMAGES = YES;
512 | CURRENT_PROJECT_VERSION = 1;
513 | DEVELOPMENT_TEAM = YH6XM8252K;
514 | ENABLE_HARDENED_RUNTIME = YES;
515 | GENERATE_INFOPLIST_FILE = YES;
516 | INFOPLIST_FILE = ZZFormatter/Info.plist;
517 | INFOPLIST_KEY_CFBundleDisplayName = ZZFormatter;
518 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
519 | LD_RUNPATH_SEARCH_PATHS = (
520 | "$(inherited)",
521 | "@executable_path/../Frameworks",
522 | "@executable_path/../../../../Frameworks",
523 | );
524 | MACOSX_DEPLOYMENT_TARGET = 11.0;
525 | MARKETING_VERSION = 1.0;
526 | PRODUCT_BUNDLE_IDENTIFIER = shein.ZZXcodeFormat.ZZFormatter;
527 | PRODUCT_NAME = "$(TARGET_NAME)";
528 | SKIP_INSTALL = YES;
529 | SWIFT_EMIT_LOC_STRINGS = YES;
530 | SWIFT_VERSION = 5.0;
531 | };
532 | name = Debug;
533 | };
534 | 30193D422AE50EE10028FC53 /* Release */ = {
535 | isa = XCBuildConfiguration;
536 | buildSettings = {
537 | CODE_SIGN_ENTITLEMENTS = ZZFormatter/ZZFormatter.entitlements;
538 | CODE_SIGN_STYLE = Automatic;
539 | COMBINE_HIDPI_IMAGES = YES;
540 | CURRENT_PROJECT_VERSION = 1;
541 | DEVELOPMENT_TEAM = YH6XM8252K;
542 | ENABLE_HARDENED_RUNTIME = YES;
543 | GENERATE_INFOPLIST_FILE = YES;
544 | INFOPLIST_FILE = ZZFormatter/Info.plist;
545 | INFOPLIST_KEY_CFBundleDisplayName = ZZFormatter;
546 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
547 | LD_RUNPATH_SEARCH_PATHS = (
548 | "$(inherited)",
549 | "@executable_path/../Frameworks",
550 | "@executable_path/../../../../Frameworks",
551 | );
552 | MACOSX_DEPLOYMENT_TARGET = 11.0;
553 | MARKETING_VERSION = 1.0;
554 | PRODUCT_BUNDLE_IDENTIFIER = shein.ZZXcodeFormat.ZZFormatter;
555 | PRODUCT_NAME = "$(TARGET_NAME)";
556 | SKIP_INSTALL = YES;
557 | SWIFT_EMIT_LOC_STRINGS = YES;
558 | SWIFT_VERSION = 5.0;
559 | };
560 | name = Release;
561 | };
562 | /* End XCBuildConfiguration section */
563 |
564 | /* Begin XCConfigurationList section */
565 | 30193D152AE50E5E0028FC53 /* Build configuration list for PBXProject "ZZXcodeFormat" */ = {
566 | isa = XCConfigurationList;
567 | buildConfigurations = (
568 | 30193D272AE50E5F0028FC53 /* Debug */,
569 | 30193D282AE50E5F0028FC53 /* Release */,
570 | );
571 | defaultConfigurationIsVisible = 0;
572 | defaultConfigurationName = Release;
573 | };
574 | 30193D292AE50E5F0028FC53 /* Build configuration list for PBXNativeTarget "ZZXcodeFormat" */ = {
575 | isa = XCConfigurationList;
576 | buildConfigurations = (
577 | 30193D2A2AE50E5F0028FC53 /* Debug */,
578 | 30193D2B2AE50E5F0028FC53 /* Release */,
579 | );
580 | defaultConfigurationIsVisible = 0;
581 | defaultConfigurationName = Release;
582 | };
583 | 30193D402AE50EE10028FC53 /* Build configuration list for PBXNativeTarget "ZZFormatter" */ = {
584 | isa = XCConfigurationList;
585 | buildConfigurations = (
586 | 30193D412AE50EE10028FC53 /* Debug */,
587 | 30193D422AE50EE10028FC53 /* Release */,
588 | );
589 | defaultConfigurationIsVisible = 0;
590 | defaultConfigurationName = Release;
591 | };
592 | /* End XCConfigurationList section */
593 | };
594 | rootObject = 30193D122AE50E5E0028FC53 /* Project object */;
595 | }
596 |
--------------------------------------------------------------------------------
/ZZXcodeFormat.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ZZXcodeFormat.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ZZXcodeFormat.xcodeproj/project.xcworkspace/xcuserdata/10088792.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/V5zhou/ZZXcodeFormat/9625cc20465d2115e4d7050dba0e0ec112c21126/ZZXcodeFormat.xcodeproj/project.xcworkspace/xcuserdata/10088792.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/ZZXcodeFormat.xcodeproj/project.xcworkspace/xcuserdata/zmz.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/V5zhou/ZZXcodeFormat/9625cc20465d2115e4d7050dba0e0ec112c21126/ZZXcodeFormat.xcodeproj/project.xcworkspace/xcuserdata/zmz.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/ZZXcodeFormat.xcodeproj/xcshareddata/xcschemes/ZZFormatter.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
6 |
9 |
10 |
16 |
22 |
23 |
24 |
30 |
36 |
37 |
38 |
39 |
40 |
45 |
46 |
47 |
48 |
60 |
64 |
65 |
66 |
72 |
73 |
74 |
75 |
83 |
85 |
91 |
92 |
93 |
94 |
96 |
97 |
100 |
101 |
102 |
--------------------------------------------------------------------------------
/ZZXcodeFormat.xcodeproj/xcshareddata/xcschemes/ZZXcodeFormat.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
45 |
51 |
52 |
53 |
54 |
60 |
62 |
68 |
69 |
70 |
71 |
73 |
74 |
77 |
78 |
79 |
--------------------------------------------------------------------------------
/ZZXcodeFormat.xcodeproj/xcuserdata/10088792.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/ZZXcodeFormat.xcodeproj/xcuserdata/10088792.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | ZZFormatter.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 | ZZXcodeFormat.xcscheme_^#shared#^_
13 |
14 | orderHint
15 | 1
16 |
17 |
18 | SuppressBuildableAutocreation
19 |
20 | 30193D192AE50E5E0028FC53
21 |
22 | primary
23 |
24 |
25 | 30193D2F2AE50EE10028FC53
26 |
27 | primary
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/ZZXcodeFormat/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // ZZXcodeFormat
4 | //
5 | // Created by Yem Zhou on 2023/10/22.
6 | //
7 |
8 | import Cocoa
9 |
10 | @main
11 | class AppDelegate: NSObject, NSApplicationDelegate {
12 |
13 |
14 |
15 |
16 | func applicationDidFinishLaunching(_ aNotification: Notification) {
17 | // Insert code here to initialize your application
18 | }
19 |
20 | func applicationWillTerminate(_ aNotification: Notification) {
21 | // Insert code here to tear down your application
22 | }
23 |
24 | func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool {
25 | return true
26 | }
27 |
28 |
29 | }
30 |
31 |
--------------------------------------------------------------------------------
/ZZXcodeFormat/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/ZZXcodeFormat/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "scale" : "1x",
6 | "size" : "16x16"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "scale" : "2x",
11 | "size" : "16x16"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "scale" : "1x",
16 | "size" : "32x32"
17 | },
18 | {
19 | "idiom" : "mac",
20 | "scale" : "2x",
21 | "size" : "32x32"
22 | },
23 | {
24 | "idiom" : "mac",
25 | "scale" : "1x",
26 | "size" : "128x128"
27 | },
28 | {
29 | "filename" : "稿定设计-3 1.png",
30 | "idiom" : "mac",
31 | "scale" : "2x",
32 | "size" : "128x128"
33 | },
34 | {
35 | "filename" : "稿定设计-3.png",
36 | "idiom" : "mac",
37 | "scale" : "1x",
38 | "size" : "256x256"
39 | },
40 | {
41 | "filename" : "稿定设计-2 1.png",
42 | "idiom" : "mac",
43 | "scale" : "2x",
44 | "size" : "256x256"
45 | },
46 | {
47 | "filename" : "稿定设计-2.png",
48 | "idiom" : "mac",
49 | "scale" : "1x",
50 | "size" : "512x512"
51 | },
52 | {
53 | "filename" : "稿定设计-1.png",
54 | "idiom" : "mac",
55 | "scale" : "2x",
56 | "size" : "512x512"
57 | }
58 | ],
59 | "info" : {
60 | "author" : "xcode",
61 | "version" : 1
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/ZZXcodeFormat/Assets.xcassets/AppIcon.appiconset/稿定设计-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/V5zhou/ZZXcodeFormat/9625cc20465d2115e4d7050dba0e0ec112c21126/ZZXcodeFormat/Assets.xcassets/AppIcon.appiconset/稿定设计-1.png
--------------------------------------------------------------------------------
/ZZXcodeFormat/Assets.xcassets/AppIcon.appiconset/稿定设计-2 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/V5zhou/ZZXcodeFormat/9625cc20465d2115e4d7050dba0e0ec112c21126/ZZXcodeFormat/Assets.xcassets/AppIcon.appiconset/稿定设计-2 1.png
--------------------------------------------------------------------------------
/ZZXcodeFormat/Assets.xcassets/AppIcon.appiconset/稿定设计-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/V5zhou/ZZXcodeFormat/9625cc20465d2115e4d7050dba0e0ec112c21126/ZZXcodeFormat/Assets.xcassets/AppIcon.appiconset/稿定设计-2.png
--------------------------------------------------------------------------------
/ZZXcodeFormat/Assets.xcassets/AppIcon.appiconset/稿定设计-3 1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/V5zhou/ZZXcodeFormat/9625cc20465d2115e4d7050dba0e0ec112c21126/ZZXcodeFormat/Assets.xcassets/AppIcon.appiconset/稿定设计-3 1.png
--------------------------------------------------------------------------------
/ZZXcodeFormat/Assets.xcassets/AppIcon.appiconset/稿定设计-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/V5zhou/ZZXcodeFormat/9625cc20465d2115e4d7050dba0e0ec112c21126/ZZXcodeFormat/Assets.xcassets/AppIcon.appiconset/稿定设计-3.png
--------------------------------------------------------------------------------
/ZZXcodeFormat/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ZZXcodeFormat/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
672 |
673 |
674 |
675 |
676 |
677 |
678 |
679 |
680 |
681 |
682 |
683 |
684 |
685 |
686 |
687 |
688 |
689 |
690 |
691 |
692 |
693 |
694 |
695 |
696 |
697 |
698 |
699 |
700 |
701 |
702 |
703 |
704 |
705 |
706 |
707 |
708 |
709 |
710 |
711 |
712 |
713 |
714 |
715 |
716 |
717 |
718 |
--------------------------------------------------------------------------------
/ZZXcodeFormat/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // ZZXcodeFormat
4 | //
5 | // Created by Yem Zhou on 2023/10/22.
6 | //
7 |
8 | import Cocoa
9 |
10 | class ViewController: NSViewController {
11 |
12 | override func viewDidLoad() {
13 | super.viewDidLoad()
14 |
15 | // Do any additional setup after loading the view.
16 | }
17 |
18 | override var representedObject: Any? {
19 | didSet {
20 | // Update the view, if already loaded.
21 | }
22 | }
23 |
24 |
25 | }
26 |
27 |
--------------------------------------------------------------------------------
/ZZXcodeFormat/ZZXcodeFormat.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 | com.apple.security.files.user-selected.read-only
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------