├── assets
├── show.gif
└── current.png
├── BarTuner
├── Assets.xcassets
│ ├── Contents.json
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── Preview Content
│ └── Preview Assets.xcassets
│ │ └── Contents.json
├── BarTuner.entitlements
├── BarTunerApp.swift
└── ContentView.swift
├── BarTuner.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── project.pbxproj
├── README.md
├── LICENSE
└── .gitignore
/assets/show.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/s1xu/BarTuner/HEAD/assets/show.gif
--------------------------------------------------------------------------------
/assets/current.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/s1xu/BarTuner/HEAD/assets/current.png
--------------------------------------------------------------------------------
/BarTuner/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/BarTuner/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/BarTuner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/BarTuner/BarTuner.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/BarTuner/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 |
--------------------------------------------------------------------------------
/BarTuner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # BarTuner
2 |
3 | 
4 |
5 | **BarTuner** 是一款专为 macOS 用户设计的工具,旨在帮助调节菜单栏右上角图标的间距,提升用户界面体验。
6 |
7 | 
8 |
9 | ## 背景
10 |
11 | 随着 **MacBook 14** 及以后版本的发布,苹果引入了新的 **刘海设计**,这使得屏幕中央的显示区域变得更加紧凑。与此同时,右侧状态栏的图标间距相较于以前的设计有所增宽,导致原本就空间有限的菜单栏显得更加拥挤,影响了工作效率和视觉舒适度。
12 |
13 | ## 主要功能
14 |
15 | BarTuner 可以轻松调整 macOS 菜单栏右上角图标的间距,使得用户能够根据自己的需求优化菜单栏布局。无论是减少图标间距,还是根据个人喜好进行定制,BarTuner 都能帮助你恢复清爽、整洁的菜单栏外观。
16 |
17 | ### 功能亮点:
18 | - **灵活调整**:支持自定义菜单栏图标的间距。
19 | - **直观操作**:通过简单易用的界面进行调整,无需复杂配置。
20 | - **提升效率**:优化菜单栏布局,避免过于拥挤,提升视觉体验和操作效率。
21 |
22 | ### 使用:
23 |
24 | 1. [前往Releases下载](https://github.com/s1xu/BarTuner/releases)
25 | 2. 打开dmg, 会在桌面生成BarTuner
26 | 3. 点击打开BarTuner,将BarTuner拖入右侧文件夹
27 | 4. 打开后滑动滑块调整菜单栏间距,只需要设置一次即可持续存在
28 | 5. 如无法打开、文件已损坏或其他提示,需移除隔离属性
29 |
30 | | 在终端输入:
31 | ```
32 | sudo xattr -dr com.apple.quarantine /Applications/BarTuner.app
33 | ```
34 |
35 | ### 许可证
36 | 此项目采用 MIT 许可证。
37 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 s1xu
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 |
--------------------------------------------------------------------------------
/BarTuner/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 | "idiom" : "mac",
30 | "scale" : "2x",
31 | "size" : "128x128"
32 | },
33 | {
34 | "idiom" : "mac",
35 | "scale" : "1x",
36 | "size" : "256x256"
37 | },
38 | {
39 | "idiom" : "mac",
40 | "scale" : "2x",
41 | "size" : "256x256"
42 | },
43 | {
44 | "idiom" : "mac",
45 | "scale" : "1x",
46 | "size" : "512x512"
47 | },
48 | {
49 | "idiom" : "mac",
50 | "scale" : "2x",
51 | "size" : "512x512"
52 | }
53 | ],
54 | "info" : {
55 | "author" : "xcode",
56 | "version" : 1
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/BarTuner/BarTunerApp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BarTunerApp.swift
3 | // BarTuner
4 | //
5 | // Created by s1xu on 2025/2/15.
6 | //
7 |
8 | import SwiftUI
9 |
10 | @main
11 | struct BarTuner: App {
12 | @State private var window: NSWindow?
13 |
14 | var body: some Scene {
15 | WindowGroup {
16 | ContentView()
17 | .onAppear {
18 | if let window = NSApplication.shared.windows.first {
19 | self.window = window
20 | window.setContentSize(NSSize(width: 400, height: 200))
21 | window.styleMask.insert(.closable)
22 | centerWindow(window)
23 | }
24 | }
25 | }
26 | }
27 | }
28 |
29 | private func centerWindow(_ window: NSWindow) {
30 | if let screen = window.screen {
31 | let screenFrame = screen.frame
32 | let windowSize = window.frame.size
33 | let centerX = (screenFrame.size.width - windowSize.width) / 2
34 | let centerY = (screenFrame.size.height - windowSize.height) / 2
35 | let newOrigin = CGPoint(x: centerX, y: centerY)
36 |
37 | window.setFrameOrigin(newOrigin)
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## User settings
6 | xcuserdata/
7 |
8 | ## Obj-C/Swift specific
9 | *.hmap
10 |
11 | ## App packaging
12 | *.ipa
13 | *.dSYM.zip
14 | *.dSYM
15 |
16 | ## Playgrounds
17 | timeline.xctimeline
18 | playground.xcworkspace
19 |
20 | # Swift Package Manager
21 | #
22 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
23 | # Packages/
24 | # Package.pins
25 | # Package.resolved
26 | # *.xcodeproj
27 | #
28 | # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
29 | # hence it is not needed unless you have added a package configuration file to your project
30 | # .swiftpm
31 |
32 | .build/
33 |
34 | # CocoaPods
35 | #
36 | # We recommend against adding the Pods directory to your .gitignore. However
37 | # you should judge for yourself, the pros and cons are mentioned at:
38 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
39 | #
40 | # Pods/
41 | #
42 | # Add this line if you want to avoid checking in source code from the Xcode workspace
43 | # *.xcworkspace
44 |
45 | # Carthage
46 | #
47 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
48 | # Carthage/Checkouts
49 |
50 | Carthage/Build/
51 |
52 | # fastlane
53 | #
54 | # It is recommended to not store the screenshots in the git repo.
55 | # Instead, use fastlane to re-generate the screenshots whenever they are needed.
56 | # For more information about the recommended setup visit:
57 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
58 |
59 | fastlane/report.xml
60 | fastlane/Preview.html
61 | fastlane/screenshots/**/*.png
62 | fastlane/test_output
63 |
--------------------------------------------------------------------------------
/BarTuner/ContentView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ContentView.swift
3 | // BarTuner
4 | //
5 | // Created by s1xu on 2025/2/14.
6 | //
7 |
8 | import SwiftUI
9 | import AppKit
10 |
11 |
12 |
13 | struct ContentView: View {
14 | @State private var spacingValue: Int = 16
15 | @State private var showPermissionAlert = false
16 |
17 | var body: some View {
18 | VStack {
19 | Text("Menu Tuner")
20 | .font(.title)
21 |
22 | Slider(value: Binding(
23 | get: { Double(spacingValue) },
24 | set: { newValue in
25 | spacingValue = Int(newValue)
26 | print("Slider value changed to: \(spacingValue)")
27 | applySettings()
28 | }
29 | ), in: 0...32, step: 1)
30 |
31 | Text("Current spacing: \(spacingValue)")
32 |
33 | Button("Restore Defaults") {
34 | spacingValue = 16
35 | applySettings()
36 | }
37 | }
38 | .padding()
39 | .frame(width: 400, height: 200)
40 | .onAppear {
41 | checkFullDiskAccess { hasPermission in
42 | guard hasPermission else {
43 | showPermissionAlert = true
44 | return
45 | }
46 | loadCurrentSettings()
47 | }
48 | }
49 | .alert("需要完全磁盘访问权限", isPresented: $showPermissionAlert) {
50 | Button("打开设置") {
51 | openSecurityPreferences()
52 | }
53 | Button("取消", role: .cancel) {}
54 | } message: {
55 | Text("请前往系统偏好设置 → 安全性与隐私 → 完全磁盘访问,并添加本应用到权限列表")
56 | }
57 | .onDisappear {
58 | NSApp.terminate(nil)
59 | }
60 | }
61 |
62 | private func checkFullDiskAccess(completion: @escaping (Bool) -> Void) {
63 | let protectedPath = NSHomeDirectory().appending("/Library/Preferences/.TestWriteAccess")
64 |
65 | do {
66 | try "test".write(toFile: protectedPath, atomically: true, encoding: .utf8)
67 | try FileManager.default.removeItem(atPath: protectedPath)
68 | completion(true)
69 | } catch {
70 | print("权限检测失败: \(error.localizedDescription)")
71 | completion(false)
72 | }
73 | }
74 |
75 | private func openSecurityPreferences() {
76 | let url = URL(string: "x-apple.systempreferences:com.apple.preference.security?Privacy_AllFiles")!
77 | NSWorkspace.shared.open(url)
78 | }
79 |
80 | private func loadCurrentSettings() {
81 | let spacing = shell("defaults -currentHost read -globalDomain NSStatusItemSpacing") ?? "16"
82 | spacingValue = Int(spacing) ?? 16
83 | }
84 |
85 | private func applySettings() {
86 | let defaultsCommand1 = "defaults -currentHost write -globalDomain NSStatusItemSpacing -int \(spacingValue)"
87 | let defaultsCommand2 = "defaults -currentHost write -globalDomain NSStatusItemSelectionPadding -int \(spacingValue)"
88 | let killCommands = ["killall ControlCenter", "killall SystemUIServer"]
89 |
90 | shell(defaultsCommand1)
91 | shell(defaultsCommand2)
92 | killCommands.forEach { shell($0) }
93 | }
94 |
95 | private func shell(_ command: String) -> String? {
96 | let task = Process()
97 | let pipe = Pipe()
98 |
99 | task.standardOutput = pipe
100 | task.arguments = ["-c", command]
101 | task.launchPath = "/bin/zsh"
102 |
103 | do {
104 | try task.run()
105 | let data = pipe.fileHandleForReading.readDataToEndOfFile()
106 | return String(data: data, encoding: .utf8)?.trimmingCharacters(in: .whitespacesAndNewlines)
107 | } catch {
108 | print("执行命令失败: \(error.localizedDescription)")
109 | return nil
110 | }
111 | }
112 | }
113 |
114 | struct ContentView_Previews: PreviewProvider {
115 | static var previews: some View {
116 | ContentView()
117 | }
118 | }
119 |
--------------------------------------------------------------------------------
/BarTuner.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 56;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 270D57662D60E2AD005985DA /* BarTunerApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 270D57652D60E2AD005985DA /* BarTunerApp.swift */; };
11 | 270D57682D60E2AD005985DA /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 270D57672D60E2AD005985DA /* ContentView.swift */; };
12 | 270D576A2D60E2AE005985DA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 270D57692D60E2AE005985DA /* Assets.xcassets */; };
13 | 270D576D2D60E2AE005985DA /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 270D576C2D60E2AE005985DA /* Preview Assets.xcassets */; };
14 | /* End PBXBuildFile section */
15 |
16 | /* Begin PBXFileReference section */
17 | 270D57622D60E2AD005985DA /* BarTuner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BarTuner.app; sourceTree = BUILT_PRODUCTS_DIR; };
18 | 270D57652D60E2AD005985DA /* BarTunerApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BarTunerApp.swift; sourceTree = ""; };
19 | 270D57672D60E2AD005985DA /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
20 | 270D57692D60E2AE005985DA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
21 | 270D576C2D60E2AE005985DA /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
22 | 270D576E2D60E2AE005985DA /* BarTuner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = BarTuner.entitlements; sourceTree = ""; };
23 | /* End PBXFileReference section */
24 |
25 | /* Begin PBXFrameworksBuildPhase section */
26 | 270D575F2D60E2AD005985DA /* Frameworks */ = {
27 | isa = PBXFrameworksBuildPhase;
28 | buildActionMask = 2147483647;
29 | files = (
30 | );
31 | runOnlyForDeploymentPostprocessing = 0;
32 | };
33 | /* End PBXFrameworksBuildPhase section */
34 |
35 | /* Begin PBXGroup section */
36 | 270D57592D60E2AD005985DA = {
37 | isa = PBXGroup;
38 | children = (
39 | 270D57642D60E2AD005985DA /* BarTuner */,
40 | 270D57632D60E2AD005985DA /* Products */,
41 | );
42 | sourceTree = "";
43 | };
44 | 270D57632D60E2AD005985DA /* Products */ = {
45 | isa = PBXGroup;
46 | children = (
47 | 270D57622D60E2AD005985DA /* BarTuner.app */,
48 | );
49 | name = Products;
50 | sourceTree = "";
51 | };
52 | 270D57642D60E2AD005985DA /* BarTuner */ = {
53 | isa = PBXGroup;
54 | children = (
55 | 270D57652D60E2AD005985DA /* BarTunerApp.swift */,
56 | 270D57672D60E2AD005985DA /* ContentView.swift */,
57 | 270D57692D60E2AE005985DA /* Assets.xcassets */,
58 | 270D576E2D60E2AE005985DA /* BarTuner.entitlements */,
59 | 270D576B2D60E2AE005985DA /* Preview Content */,
60 | );
61 | path = BarTuner;
62 | sourceTree = "";
63 | };
64 | 270D576B2D60E2AE005985DA /* Preview Content */ = {
65 | isa = PBXGroup;
66 | children = (
67 | 270D576C2D60E2AE005985DA /* Preview Assets.xcassets */,
68 | );
69 | path = "Preview Content";
70 | sourceTree = "";
71 | };
72 | /* End PBXGroup section */
73 |
74 | /* Begin PBXNativeTarget section */
75 | 270D57612D60E2AD005985DA /* BarTuner */ = {
76 | isa = PBXNativeTarget;
77 | buildConfigurationList = 270D57712D60E2AE005985DA /* Build configuration list for PBXNativeTarget "BarTuner" */;
78 | buildPhases = (
79 | 270D575E2D60E2AD005985DA /* Sources */,
80 | 270D575F2D60E2AD005985DA /* Frameworks */,
81 | 270D57602D60E2AD005985DA /* Resources */,
82 | );
83 | buildRules = (
84 | );
85 | dependencies = (
86 | );
87 | name = BarTuner;
88 | productName = BarTuner;
89 | productReference = 270D57622D60E2AD005985DA /* BarTuner.app */;
90 | productType = "com.apple.product-type.application";
91 | };
92 | /* End PBXNativeTarget section */
93 |
94 | /* Begin PBXProject section */
95 | 270D575A2D60E2AD005985DA /* Project object */ = {
96 | isa = PBXProject;
97 | attributes = {
98 | BuildIndependentTargetsInParallel = 1;
99 | LastSwiftUpdateCheck = 1420;
100 | LastUpgradeCheck = 1420;
101 | TargetAttributes = {
102 | 270D57612D60E2AD005985DA = {
103 | CreatedOnToolsVersion = 14.2;
104 | };
105 | };
106 | };
107 | buildConfigurationList = 270D575D2D60E2AD005985DA /* Build configuration list for PBXProject "BarTuner" */;
108 | compatibilityVersion = "Xcode 14.0";
109 | developmentRegion = en;
110 | hasScannedForEncodings = 0;
111 | knownRegions = (
112 | en,
113 | Base,
114 | );
115 | mainGroup = 270D57592D60E2AD005985DA;
116 | productRefGroup = 270D57632D60E2AD005985DA /* Products */;
117 | projectDirPath = "";
118 | projectRoot = "";
119 | targets = (
120 | 270D57612D60E2AD005985DA /* BarTuner */,
121 | );
122 | };
123 | /* End PBXProject section */
124 |
125 | /* Begin PBXResourcesBuildPhase section */
126 | 270D57602D60E2AD005985DA /* Resources */ = {
127 | isa = PBXResourcesBuildPhase;
128 | buildActionMask = 2147483647;
129 | files = (
130 | 270D576D2D60E2AE005985DA /* Preview Assets.xcassets in Resources */,
131 | 270D576A2D60E2AE005985DA /* Assets.xcassets in Resources */,
132 | );
133 | runOnlyForDeploymentPostprocessing = 0;
134 | };
135 | /* End PBXResourcesBuildPhase section */
136 |
137 | /* Begin PBXSourcesBuildPhase section */
138 | 270D575E2D60E2AD005985DA /* Sources */ = {
139 | isa = PBXSourcesBuildPhase;
140 | buildActionMask = 2147483647;
141 | files = (
142 | 270D57682D60E2AD005985DA /* ContentView.swift in Sources */,
143 | 270D57662D60E2AD005985DA /* BarTunerApp.swift in Sources */,
144 | );
145 | runOnlyForDeploymentPostprocessing = 0;
146 | };
147 | /* End PBXSourcesBuildPhase section */
148 |
149 | /* Begin XCBuildConfiguration section */
150 | 270D576F2D60E2AE005985DA /* Debug */ = {
151 | isa = XCBuildConfiguration;
152 | buildSettings = {
153 | ALWAYS_SEARCH_USER_PATHS = NO;
154 | CLANG_ANALYZER_NONNULL = YES;
155 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
156 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
157 | CLANG_ENABLE_MODULES = YES;
158 | CLANG_ENABLE_OBJC_ARC = YES;
159 | CLANG_ENABLE_OBJC_WEAK = YES;
160 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
161 | CLANG_WARN_BOOL_CONVERSION = YES;
162 | CLANG_WARN_COMMA = YES;
163 | CLANG_WARN_CONSTANT_CONVERSION = YES;
164 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
165 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
166 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
167 | CLANG_WARN_EMPTY_BODY = YES;
168 | CLANG_WARN_ENUM_CONVERSION = YES;
169 | CLANG_WARN_INFINITE_RECURSION = YES;
170 | CLANG_WARN_INT_CONVERSION = YES;
171 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
172 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
173 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
174 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
175 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
176 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
177 | CLANG_WARN_STRICT_PROTOTYPES = YES;
178 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
179 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
180 | CLANG_WARN_UNREACHABLE_CODE = YES;
181 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
182 | COPY_PHASE_STRIP = NO;
183 | DEBUG_INFORMATION_FORMAT = dwarf;
184 | ENABLE_STRICT_OBJC_MSGSEND = YES;
185 | ENABLE_TESTABILITY = YES;
186 | GCC_C_LANGUAGE_STANDARD = gnu11;
187 | GCC_DYNAMIC_NO_PIC = NO;
188 | GCC_NO_COMMON_BLOCKS = YES;
189 | GCC_OPTIMIZATION_LEVEL = 0;
190 | GCC_PREPROCESSOR_DEFINITIONS = (
191 | "DEBUG=1",
192 | "$(inherited)",
193 | );
194 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
195 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
196 | GCC_WARN_UNDECLARED_SELECTOR = YES;
197 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
198 | GCC_WARN_UNUSED_FUNCTION = YES;
199 | GCC_WARN_UNUSED_VARIABLE = YES;
200 | MACOSX_DEPLOYMENT_TARGET = 12.6;
201 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
202 | MTL_FAST_MATH = YES;
203 | ONLY_ACTIVE_ARCH = YES;
204 | SDKROOT = macosx;
205 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
206 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
207 | };
208 | name = Debug;
209 | };
210 | 270D57702D60E2AE005985DA /* Release */ = {
211 | isa = XCBuildConfiguration;
212 | buildSettings = {
213 | ALWAYS_SEARCH_USER_PATHS = NO;
214 | CLANG_ANALYZER_NONNULL = YES;
215 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
216 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
217 | CLANG_ENABLE_MODULES = YES;
218 | CLANG_ENABLE_OBJC_ARC = YES;
219 | CLANG_ENABLE_OBJC_WEAK = YES;
220 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
221 | CLANG_WARN_BOOL_CONVERSION = YES;
222 | CLANG_WARN_COMMA = YES;
223 | CLANG_WARN_CONSTANT_CONVERSION = YES;
224 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
225 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
226 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
227 | CLANG_WARN_EMPTY_BODY = YES;
228 | CLANG_WARN_ENUM_CONVERSION = YES;
229 | CLANG_WARN_INFINITE_RECURSION = YES;
230 | CLANG_WARN_INT_CONVERSION = YES;
231 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
232 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
233 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
234 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
235 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
236 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
237 | CLANG_WARN_STRICT_PROTOTYPES = YES;
238 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
239 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
240 | CLANG_WARN_UNREACHABLE_CODE = YES;
241 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
242 | COPY_PHASE_STRIP = NO;
243 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
244 | ENABLE_NS_ASSERTIONS = NO;
245 | ENABLE_STRICT_OBJC_MSGSEND = YES;
246 | GCC_C_LANGUAGE_STANDARD = gnu11;
247 | GCC_NO_COMMON_BLOCKS = YES;
248 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
249 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
250 | GCC_WARN_UNDECLARED_SELECTOR = YES;
251 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
252 | GCC_WARN_UNUSED_FUNCTION = YES;
253 | GCC_WARN_UNUSED_VARIABLE = YES;
254 | MACOSX_DEPLOYMENT_TARGET = 12.6;
255 | MTL_ENABLE_DEBUG_INFO = NO;
256 | MTL_FAST_MATH = YES;
257 | SDKROOT = macosx;
258 | SWIFT_COMPILATION_MODE = wholemodule;
259 | SWIFT_OPTIMIZATION_LEVEL = "-O";
260 | };
261 | name = Release;
262 | };
263 | 270D57722D60E2AE005985DA /* Debug */ = {
264 | isa = XCBuildConfiguration;
265 | buildSettings = {
266 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
267 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
268 | CODE_SIGN_ENTITLEMENTS = BarTuner/BarTuner.entitlements;
269 | CODE_SIGN_STYLE = Automatic;
270 | COMBINE_HIDPI_IMAGES = YES;
271 | CURRENT_PROJECT_VERSION = 1;
272 | DEVELOPMENT_ASSET_PATHS = "\"BarTuner/Preview Content\"";
273 | ENABLE_PREVIEWS = YES;
274 | GENERATE_INFOPLIST_FILE = YES;
275 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
276 | LD_RUNPATH_SEARCH_PATHS = (
277 | "$(inherited)",
278 | "@executable_path/../Frameworks",
279 | );
280 | MARKETING_VERSION = 1.0;
281 | PRODUCT_BUNDLE_IDENTIFIER = com.s1xu.BarTuner;
282 | PRODUCT_NAME = "$(TARGET_NAME)";
283 | SWIFT_EMIT_LOC_STRINGS = YES;
284 | SWIFT_VERSION = 5.0;
285 | };
286 | name = Debug;
287 | };
288 | 270D57732D60E2AE005985DA /* Release */ = {
289 | isa = XCBuildConfiguration;
290 | buildSettings = {
291 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
292 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
293 | CODE_SIGN_ENTITLEMENTS = BarTuner/BarTuner.entitlements;
294 | CODE_SIGN_STYLE = Automatic;
295 | COMBINE_HIDPI_IMAGES = YES;
296 | CURRENT_PROJECT_VERSION = 1;
297 | DEVELOPMENT_ASSET_PATHS = "\"BarTuner/Preview Content\"";
298 | ENABLE_PREVIEWS = YES;
299 | GENERATE_INFOPLIST_FILE = YES;
300 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
301 | LD_RUNPATH_SEARCH_PATHS = (
302 | "$(inherited)",
303 | "@executable_path/../Frameworks",
304 | );
305 | MARKETING_VERSION = 1.0;
306 | PRODUCT_BUNDLE_IDENTIFIER = com.s1xu.BarTuner;
307 | PRODUCT_NAME = "$(TARGET_NAME)";
308 | SWIFT_EMIT_LOC_STRINGS = YES;
309 | SWIFT_VERSION = 5.0;
310 | };
311 | name = Release;
312 | };
313 | /* End XCBuildConfiguration section */
314 |
315 | /* Begin XCConfigurationList section */
316 | 270D575D2D60E2AD005985DA /* Build configuration list for PBXProject "BarTuner" */ = {
317 | isa = XCConfigurationList;
318 | buildConfigurations = (
319 | 270D576F2D60E2AE005985DA /* Debug */,
320 | 270D57702D60E2AE005985DA /* Release */,
321 | );
322 | defaultConfigurationIsVisible = 0;
323 | defaultConfigurationName = Release;
324 | };
325 | 270D57712D60E2AE005985DA /* Build configuration list for PBXNativeTarget "BarTuner" */ = {
326 | isa = XCConfigurationList;
327 | buildConfigurations = (
328 | 270D57722D60E2AE005985DA /* Debug */,
329 | 270D57732D60E2AE005985DA /* Release */,
330 | );
331 | defaultConfigurationIsVisible = 0;
332 | defaultConfigurationName = Release;
333 | };
334 | /* End XCConfigurationList section */
335 | };
336 | rootObject = 270D575A2D60E2AD005985DA /* Project object */;
337 | }
338 |
--------------------------------------------------------------------------------