├── powermoves
├── Assets.xcassets
│ ├── Contents.json
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── Preview Content
│ └── Preview Assets.xcassets
│ │ └── Contents.json
├── powermoves.entitlements
└── powermovesApp.swift
├── powermoves.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ ├── xcshareddata
│ │ ├── WorkspaceSettings.xcsettings
│ │ └── IDEWorkspaceChecks.plist
│ └── xcuserdata
│ │ └── tim.xcuserdatad
│ │ └── WorkspaceSettings.xcsettings
├── xcuserdata
│ └── tim.xcuserdatad
│ │ └── xcschemes
│ │ ├── xcschememanagement.plist
│ │ └── powermoves 1.xcscheme
├── xcshareddata
│ └── xcschemes
│ │ └── powermoves.xcscheme
└── project.pbxproj
└── README.md
/powermoves/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/powermoves/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/powermoves.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/powermoves/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 |
--------------------------------------------------------------------------------
/powermoves.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/powermoves.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/powermoves/powermoves.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 |
--------------------------------------------------------------------------------
/powermoves.xcodeproj/project.xcworkspace/xcuserdata/tim.xcuserdatad/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildLocationStyle
6 | CustomLocation
7 | CustomBuildIntermediatesPath
8 | Build/Intermediates.noindex
9 | CustomBuildLocationType
10 | RelativeToWorkspace
11 | CustomBuildProductsPath
12 | Build/Products
13 | DerivedDataLocationStyle
14 | Default
15 | ShowSharedSchemesAutomaticallyEnabled
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/powermoves.xcodeproj/xcuserdata/tim.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | powermoves 1.xcscheme
8 |
9 | isShown
10 |
11 | orderHint
12 | 1
13 |
14 | powermoves.xcscheme_^#shared#^_
15 |
16 | orderHint
17 | 0
18 |
19 |
20 | SuppressBuildableAutocreation
21 |
22 | 225E14EB2ABBC01C003FE071
23 |
24 | primary
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Power Moves
2 | 100 lines of code to add some time pressure to your zoom calls.
3 |
4 | Simply turn it on, and you're at 1% (You'll obviously need to change the settings to hide your actual battery indicator)
5 |
6 | 
7 |
8 | Alternatively, you can start a countdown from 5% to 1%.
9 |
10 | 
11 |
12 | ## Some good lines to use
13 | - "I'm at 5%, you'll have to be quick"
14 | - "Down to 3%, make it snappy."
15 | - "At 2%, speak fast or forever hold your peace."
16 | - "4% left, words are a luxury I can’t afford."
17 | - "I’ve got 1%, so this better be good."
18 | - "2% left, the race against time is real."
19 | - "4% here, let’s treat this like an elevator pitch."
20 | - "I’m at 3%, say it like you mean it."
21 |
--------------------------------------------------------------------------------
/powermoves/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "platform" : "ios",
6 | "size" : "1024x1024"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "scale" : "1x",
11 | "size" : "16x16"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "scale" : "2x",
16 | "size" : "16x16"
17 | },
18 | {
19 | "idiom" : "mac",
20 | "scale" : "1x",
21 | "size" : "32x32"
22 | },
23 | {
24 | "idiom" : "mac",
25 | "scale" : "2x",
26 | "size" : "32x32"
27 | },
28 | {
29 | "idiom" : "mac",
30 | "scale" : "1x",
31 | "size" : "128x128"
32 | },
33 | {
34 | "idiom" : "mac",
35 | "scale" : "2x",
36 | "size" : "128x128"
37 | },
38 | {
39 | "idiom" : "mac",
40 | "scale" : "1x",
41 | "size" : "256x256"
42 | },
43 | {
44 | "idiom" : "mac",
45 | "scale" : "2x",
46 | "size" : "256x256"
47 | },
48 | {
49 | "idiom" : "mac",
50 | "scale" : "1x",
51 | "size" : "512x512"
52 | },
53 | {
54 | "idiom" : "mac",
55 | "scale" : "2x",
56 | "size" : "512x512"
57 | }
58 | ],
59 | "info" : {
60 | "author" : "xcode",
61 | "version" : 1
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/powermoves.xcodeproj/xcshareddata/xcschemes/powermoves.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
42 |
44 |
50 |
51 |
52 |
53 |
59 |
61 |
67 |
68 |
69 |
70 |
72 |
73 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/powermoves.xcodeproj/xcuserdata/tim.xcuserdatad/xcschemes/powermoves 1.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
42 |
44 |
50 |
51 |
52 |
53 |
59 |
61 |
67 |
68 |
69 |
70 |
72 |
73 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/powermoves/powermovesApp.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | @main
4 | struct PowerMovesApp: App {
5 | @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
6 |
7 | var body: some Scene {
8 | // No visible WindowGroup to prevent the app window from popping up
9 | Settings { }
10 | }
11 | }
12 |
13 | import UserNotifications
14 |
15 | class AppDelegate: NSObject, NSApplicationDelegate {
16 | var statusItem: NSStatusItem?
17 | var showPercentage = true
18 | var countdownTimer: Timer?
19 | var batteryPercentage = 1
20 |
21 | func applicationDidFinishLaunching(_ notification: Notification) {
22 | let colors: [NSColor] = [.gray]
23 | let colorIndex = 0
24 |
25 | statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
26 |
27 | if let button = statusItem?.button {
28 | updateStatusBar(button: button, batteryPercentage: batteryPercentage, color: colors[colorIndex])
29 | }
30 |
31 | // Request notification permissions
32 | requestNotificationPermissions()
33 |
34 | // Add menu
35 | let menu = NSMenu()
36 | menu.addItem(NSMenuItem(title: "Toggle Percentage", action: #selector(togglePercentage), keyEquivalent: ""))
37 | menu.addItem(NSMenuItem(title: "Show Sleep Notification", action: #selector(showSleepNotification), keyEquivalent: "s"))
38 | menu.addItem(NSMenuItem(title: "1 Minute Countdown", action: #selector(start1MinuteCountdown), keyEquivalent: "1"))
39 | menu.addItem(NSMenuItem(title: "2 Minute Countdown", action: #selector(start2MinuteCountdown), keyEquivalent: "2"))
40 | menu.addItem(NSMenuItem(title: "5 Minute Countdown", action: #selector(start5MinuteCountdown), keyEquivalent: "5"))
41 | menu.addItem(NSMenuItem.separator())
42 | menu.addItem(NSMenuItem(title: "Quit", action: #selector(quitApp), keyEquivalent: "q"))
43 |
44 | statusItem?.menu = menu
45 | }
46 |
47 | func updateStatusBar(button: NSStatusBarButton, batteryPercentage: Int, color: NSColor) {
48 | let configuration = NSImage.SymbolConfiguration(pointSize: 20, weight: .light)
49 | .applying(.init(paletteColors: [color]))
50 | let image = NSImage(systemSymbolName: "battery.0", accessibilityDescription: nil)?
51 | .withSymbolConfiguration(configuration)
52 |
53 | let imageAttachment = NSTextAttachment()
54 | imageAttachment.image = image
55 |
56 | let targetHeight: CGFloat = 15
57 | if let imageSize = image?.size {
58 | let aspectRatio = imageSize.width / imageSize.height
59 | imageAttachment.bounds = CGRect(x: 0, y: -3.5, width: targetHeight * aspectRatio, height: targetHeight)
60 | }
61 |
62 | let imageString = NSAttributedString(attachment: imageAttachment)
63 |
64 | if showPercentage {
65 | let percentageString = "\(batteryPercentage)% "
66 | let attributedString = NSMutableAttributedString(string: percentageString, attributes: [
67 | .foregroundColor: NSColor.textColor,
68 | .font: NSFont.systemFont(ofSize: 11, weight: .medium),
69 | .baselineOffset: 0
70 | ])
71 | attributedString.append(imageString)
72 | button.attributedTitle = attributedString
73 | } else {
74 | button.attributedTitle = imageString
75 | }
76 | }
77 |
78 | @objc func togglePercentage() {
79 | showPercentage.toggle()
80 | if let button = statusItem?.button {
81 | updateStatusBar(button: button, batteryPercentage: batteryPercentage, color: .gray)
82 | }
83 | }
84 |
85 | @objc func quitApp() {
86 | NSApplication.shared.terminate(self)
87 | }
88 |
89 | @objc func showSleepNotification() {
90 | let content = UNMutableNotificationContent()
91 | content.title = "Low Battery Warning"
92 | content.body = "Your Mac will sleep soon unless plugged into a power outlet."
93 | content.sound = UNNotificationSound.default
94 | content.userInfo = ["customData": "lowBattery"]
95 |
96 | let request = UNNotificationRequest(identifier: "lowBatteryWarning", content: content, trigger: nil)
97 | UNUserNotificationCenter.current().add(request)
98 | }
99 |
100 | func requestNotificationPermissions() {
101 | UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
102 | if let error = error {
103 | print("Failed to request notification permissions: \(error)")
104 | }
105 | }
106 | }
107 |
108 | @objc func start1MinuteCountdown() {
109 | startCountdown(duration: 1)
110 | }
111 |
112 | @objc func start2MinuteCountdown() {
113 | startCountdown(duration: 2)
114 | }
115 |
116 | @objc func start5MinuteCountdown() {
117 | startCountdown(duration: 5)
118 | }
119 |
120 | func startCountdown(duration: Int) {
121 | batteryPercentage = 5 // Instantly draw to 5%
122 | if let button = statusItem?.button {
123 | updateStatusBar(button: button, batteryPercentage: batteryPercentage, color: .gray)
124 | }
125 |
126 | countdownTimer?.invalidate() // Stop any existing timer
127 |
128 | let decrementInterval = Double(duration * 60) / 4.0 // Calculate interval for decrementing battery percentage
129 |
130 | countdownTimer = Timer.scheduledTimer(withTimeInterval: decrementInterval, repeats: true) { [weak self] timer in
131 | guard let self = self else { return }
132 | self.batteryPercentage -= 1
133 |
134 | if let button = self.statusItem?.button {
135 | self.updateStatusBar(button: button, batteryPercentage: self.batteryPercentage, color: .gray)
136 | }
137 |
138 | if self.batteryPercentage <= 1 {
139 | timer.invalidate()
140 | self.showSleepNotification()
141 | }
142 | }
143 | }
144 | }
145 |
--------------------------------------------------------------------------------
/powermoves.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 56;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 225E14F02ABBC01C003FE071 /* powermovesApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 225E14EF2ABBC01C003FE071 /* powermovesApp.swift */; };
11 | 225E14F42ABBC01E003FE071 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 225E14F32ABBC01E003FE071 /* Assets.xcassets */; };
12 | 225E14F82ABBC01E003FE071 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 225E14F72ABBC01E003FE071 /* Preview Assets.xcassets */; };
13 | /* End PBXBuildFile section */
14 |
15 | /* Begin PBXFileReference section */
16 | 225E14EC2ABBC01C003FE071 /* powermoves.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = powermoves.app; sourceTree = BUILT_PRODUCTS_DIR; };
17 | 225E14EF2ABBC01C003FE071 /* powermovesApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = powermovesApp.swift; sourceTree = ""; };
18 | 225E14F32ABBC01E003FE071 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
19 | 225E14F52ABBC01E003FE071 /* powermoves.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = powermoves.entitlements; sourceTree = ""; };
20 | 225E14F72ABBC01E003FE071 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
21 | /* End PBXFileReference section */
22 |
23 | /* Begin PBXFrameworksBuildPhase section */
24 | 225E14E92ABBC01C003FE071 /* Frameworks */ = {
25 | isa = PBXFrameworksBuildPhase;
26 | buildActionMask = 2147483647;
27 | files = (
28 | );
29 | runOnlyForDeploymentPostprocessing = 0;
30 | };
31 | /* End PBXFrameworksBuildPhase section */
32 |
33 | /* Begin PBXGroup section */
34 | 225E14E32ABBC01C003FE071 = {
35 | isa = PBXGroup;
36 | children = (
37 | 225E14EE2ABBC01C003FE071 /* powermoves */,
38 | 225E14ED2ABBC01C003FE071 /* Products */,
39 | );
40 | sourceTree = "";
41 | };
42 | 225E14ED2ABBC01C003FE071 /* Products */ = {
43 | isa = PBXGroup;
44 | children = (
45 | 225E14EC2ABBC01C003FE071 /* powermoves.app */,
46 | );
47 | name = Products;
48 | sourceTree = "";
49 | };
50 | 225E14EE2ABBC01C003FE071 /* powermoves */ = {
51 | isa = PBXGroup;
52 | children = (
53 | 225E14EF2ABBC01C003FE071 /* powermovesApp.swift */,
54 | 225E14F32ABBC01E003FE071 /* Assets.xcassets */,
55 | 225E14F52ABBC01E003FE071 /* powermoves.entitlements */,
56 | 225E14F62ABBC01E003FE071 /* Preview Content */,
57 | );
58 | path = powermoves;
59 | sourceTree = "";
60 | };
61 | 225E14F62ABBC01E003FE071 /* Preview Content */ = {
62 | isa = PBXGroup;
63 | children = (
64 | 225E14F72ABBC01E003FE071 /* Preview Assets.xcassets */,
65 | );
66 | path = "Preview Content";
67 | sourceTree = "";
68 | };
69 | /* End PBXGroup section */
70 |
71 | /* Begin PBXNativeTarget section */
72 | 225E14EB2ABBC01C003FE071 /* powermoves */ = {
73 | isa = PBXNativeTarget;
74 | buildConfigurationList = 225E14FB2ABBC01E003FE071 /* Build configuration list for PBXNativeTarget "powermoves" */;
75 | buildPhases = (
76 | 225E14E82ABBC01C003FE071 /* Sources */,
77 | 225E14E92ABBC01C003FE071 /* Frameworks */,
78 | 225E14EA2ABBC01C003FE071 /* Resources */,
79 | );
80 | buildRules = (
81 | );
82 | dependencies = (
83 | );
84 | name = powermoves;
85 | productName = powermoves;
86 | productReference = 225E14EC2ABBC01C003FE071 /* powermoves.app */;
87 | productType = "com.apple.product-type.application";
88 | };
89 | /* End PBXNativeTarget section */
90 |
91 | /* Begin PBXProject section */
92 | 225E14E42ABBC01C003FE071 /* Project object */ = {
93 | isa = PBXProject;
94 | attributes = {
95 | BuildIndependentTargetsInParallel = 1;
96 | LastSwiftUpdateCheck = 1500;
97 | LastUpgradeCheck = 1500;
98 | TargetAttributes = {
99 | 225E14EB2ABBC01C003FE071 = {
100 | CreatedOnToolsVersion = 15.0;
101 | };
102 | };
103 | };
104 | buildConfigurationList = 225E14E72ABBC01C003FE071 /* Build configuration list for PBXProject "powermoves" */;
105 | compatibilityVersion = "Xcode 14.0";
106 | developmentRegion = en;
107 | hasScannedForEncodings = 0;
108 | knownRegions = (
109 | en,
110 | Base,
111 | );
112 | mainGroup = 225E14E32ABBC01C003FE071;
113 | productRefGroup = 225E14ED2ABBC01C003FE071 /* Products */;
114 | projectDirPath = "";
115 | projectRoot = "";
116 | targets = (
117 | 225E14EB2ABBC01C003FE071 /* powermoves */,
118 | );
119 | };
120 | /* End PBXProject section */
121 |
122 | /* Begin PBXResourcesBuildPhase section */
123 | 225E14EA2ABBC01C003FE071 /* Resources */ = {
124 | isa = PBXResourcesBuildPhase;
125 | buildActionMask = 2147483647;
126 | files = (
127 | 225E14F82ABBC01E003FE071 /* Preview Assets.xcassets in Resources */,
128 | 225E14F42ABBC01E003FE071 /* Assets.xcassets in Resources */,
129 | );
130 | runOnlyForDeploymentPostprocessing = 0;
131 | };
132 | /* End PBXResourcesBuildPhase section */
133 |
134 | /* Begin PBXSourcesBuildPhase section */
135 | 225E14E82ABBC01C003FE071 /* Sources */ = {
136 | isa = PBXSourcesBuildPhase;
137 | buildActionMask = 2147483647;
138 | files = (
139 | 225E14F02ABBC01C003FE071 /* powermovesApp.swift in Sources */,
140 | );
141 | runOnlyForDeploymentPostprocessing = 0;
142 | };
143 | /* End PBXSourcesBuildPhase section */
144 |
145 | /* Begin XCBuildConfiguration section */
146 | 225E14F92ABBC01E003FE071 /* Debug */ = {
147 | isa = XCBuildConfiguration;
148 | buildSettings = {
149 | ALWAYS_SEARCH_USER_PATHS = NO;
150 | ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES = "";
151 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
152 | CLANG_ANALYZER_NONNULL = YES;
153 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
154 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
155 | CLANG_ENABLE_MODULES = YES;
156 | CLANG_ENABLE_OBJC_ARC = YES;
157 | CLANG_ENABLE_OBJC_WEAK = YES;
158 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
159 | CLANG_WARN_BOOL_CONVERSION = YES;
160 | CLANG_WARN_COMMA = YES;
161 | CLANG_WARN_CONSTANT_CONVERSION = YES;
162 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
163 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
164 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
165 | CLANG_WARN_EMPTY_BODY = YES;
166 | CLANG_WARN_ENUM_CONVERSION = YES;
167 | CLANG_WARN_INFINITE_RECURSION = YES;
168 | CLANG_WARN_INT_CONVERSION = YES;
169 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
170 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
171 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
172 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
173 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
174 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
175 | CLANG_WARN_STRICT_PROTOTYPES = YES;
176 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
177 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
178 | CLANG_WARN_UNREACHABLE_CODE = YES;
179 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
180 | COPY_PHASE_STRIP = NO;
181 | DEBUG_INFORMATION_FORMAT = dwarf;
182 | ENABLE_STRICT_OBJC_MSGSEND = YES;
183 | ENABLE_TESTABILITY = YES;
184 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
185 | GCC_C_LANGUAGE_STANDARD = gnu17;
186 | GCC_DYNAMIC_NO_PIC = NO;
187 | GCC_NO_COMMON_BLOCKS = YES;
188 | GCC_OPTIMIZATION_LEVEL = 0;
189 | GCC_PREPROCESSOR_DEFINITIONS = (
190 | "DEBUG=1",
191 | "$(inherited)",
192 | );
193 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
194 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
195 | GCC_WARN_UNDECLARED_SELECTOR = YES;
196 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
197 | GCC_WARN_UNUSED_FUNCTION = YES;
198 | GCC_WARN_UNUSED_VARIABLE = YES;
199 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
200 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
201 | MTL_FAST_MATH = YES;
202 | ONLY_ACTIVE_ARCH = YES;
203 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
204 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
205 | };
206 | name = Debug;
207 | };
208 | 225E14FA2ABBC01E003FE071 /* Release */ = {
209 | isa = XCBuildConfiguration;
210 | buildSettings = {
211 | ALWAYS_SEARCH_USER_PATHS = NO;
212 | ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES = "";
213 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
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 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
247 | GCC_C_LANGUAGE_STANDARD = gnu17;
248 | GCC_NO_COMMON_BLOCKS = YES;
249 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
250 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
251 | GCC_WARN_UNDECLARED_SELECTOR = YES;
252 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
253 | GCC_WARN_UNUSED_FUNCTION = YES;
254 | GCC_WARN_UNUSED_VARIABLE = YES;
255 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
256 | MTL_ENABLE_DEBUG_INFO = NO;
257 | MTL_FAST_MATH = YES;
258 | SWIFT_COMPILATION_MODE = wholemodule;
259 | };
260 | name = Release;
261 | };
262 | 225E14FC2ABBC01E003FE071 /* Debug */ = {
263 | isa = XCBuildConfiguration;
264 | buildSettings = {
265 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
266 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
267 | CODE_SIGN_ENTITLEMENTS = powermoves/powermoves.entitlements;
268 | CODE_SIGN_STYLE = Automatic;
269 | CURRENT_PROJECT_VERSION = 1;
270 | DEVELOPMENT_ASSET_PATHS = "\"powermoves/Preview Content\"";
271 | DEVELOPMENT_TEAM = 58U9267HY2;
272 | ENABLE_HARDENED_RUNTIME = YES;
273 | ENABLE_PREVIEWS = YES;
274 | GENERATE_INFOPLIST_FILE = YES;
275 | "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES;
276 | "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES;
277 | "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES;
278 | "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES;
279 | "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES;
280 | "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES;
281 | "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault;
282 | "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault;
283 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
284 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
285 | IPHONEOS_DEPLOYMENT_TARGET = 17.0;
286 | LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
287 | "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
288 | MACOSX_DEPLOYMENT_TARGET = 13.5;
289 | MARKETING_VERSION = 1.0;
290 | PRODUCT_BUNDLE_IDENTIFIER = tholman.powermoves;
291 | PRODUCT_NAME = "$(TARGET_NAME)";
292 | SDKROOT = auto;
293 | SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
294 | SWIFT_EMIT_LOC_STRINGS = YES;
295 | SWIFT_VERSION = 5.0;
296 | TARGETED_DEVICE_FAMILY = "1,2";
297 | };
298 | name = Debug;
299 | };
300 | 225E14FD2ABBC01E003FE071 /* Release */ = {
301 | isa = XCBuildConfiguration;
302 | buildSettings = {
303 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
304 | "ASSETCATALOG_COMPILER_APPICON_NAME[sdk=*]" = AppIcon;
305 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
306 | CODE_SIGN_ENTITLEMENTS = powermoves/powermoves.entitlements;
307 | CODE_SIGN_STYLE = Automatic;
308 | CURRENT_PROJECT_VERSION = 1;
309 | DEVELOPMENT_ASSET_PATHS = "\"powermoves/Preview Content\"";
310 | DEVELOPMENT_TEAM = 58U9267HY2;
311 | ENABLE_HARDENED_RUNTIME = YES;
312 | ENABLE_PREVIEWS = YES;
313 | GENERATE_INFOPLIST_FILE = YES;
314 | "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES;
315 | "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES;
316 | "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES;
317 | "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES;
318 | "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES;
319 | "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES;
320 | "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault;
321 | "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault;
322 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
323 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
324 | IPHONEOS_DEPLOYMENT_TARGET = 17.0;
325 | LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
326 | "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
327 | MACOSX_DEPLOYMENT_TARGET = 13.5;
328 | MARKETING_VERSION = 1.0;
329 | PRODUCT_BUNDLE_IDENTIFIER = tholman.powermoves;
330 | PRODUCT_NAME = "$(TARGET_NAME)";
331 | SDKROOT = auto;
332 | SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
333 | SWIFT_EMIT_LOC_STRINGS = YES;
334 | SWIFT_VERSION = 5.0;
335 | TARGETED_DEVICE_FAMILY = "1,2";
336 | };
337 | name = Release;
338 | };
339 | /* End XCBuildConfiguration section */
340 |
341 | /* Begin XCConfigurationList section */
342 | 225E14E72ABBC01C003FE071 /* Build configuration list for PBXProject "powermoves" */ = {
343 | isa = XCConfigurationList;
344 | buildConfigurations = (
345 | 225E14F92ABBC01E003FE071 /* Debug */,
346 | 225E14FA2ABBC01E003FE071 /* Release */,
347 | );
348 | defaultConfigurationIsVisible = 0;
349 | defaultConfigurationName = Release;
350 | };
351 | 225E14FB2ABBC01E003FE071 /* Build configuration list for PBXNativeTarget "powermoves" */ = {
352 | isa = XCConfigurationList;
353 | buildConfigurations = (
354 | 225E14FC2ABBC01E003FE071 /* Debug */,
355 | 225E14FD2ABBC01E003FE071 /* Release */,
356 | );
357 | defaultConfigurationIsVisible = 0;
358 | defaultConfigurationName = Release;
359 | };
360 | /* End XCConfigurationList section */
361 | };
362 | rootObject = 225E14E42ABBC01C003FE071 /* Project object */;
363 | }
364 |
--------------------------------------------------------------------------------