diff --git a/apps/expo/app.config.ts b/apps/expo/app.config.ts
index 61f9ae6..2dc9100 100644
--- a/apps/expo/app.config.ts
+++ b/apps/expo/app.config.ts
@@ -6,7 +6,7 @@ export default ({ config }: ConfigContext): ExpoConfig => ({
slug: "digitalbreak",
version: "1.0.0",
orientation: "portrait",
- icon: "./assets/images/icon.png",
+ icon: "./assets/images/default.png",
scheme: "myapp",
userInterfaceStyle: "automatic",
splash: {
@@ -32,6 +32,23 @@ export default ({ config }: ConfigContext): ExpoConfig => ({
},
plugins: [
"expo-router",
+ [
+ "expo-dynamic-app-icon",
+ {
+ default: {
+ image: "./assets/images/default.png",
+ prerendered: true,
+ },
+ light: {
+ image: "./assets/images/light.png",
+ prerendered: true,
+ },
+ dark: {
+ image: "./assets/images/dark.png",
+ prerendered: true,
+ },
+ },
+ ],
[
"expo-build-properties",
{
diff --git a/apps/expo/app/(tabs)/overview/[appId].tsx b/apps/expo/app/(tabs)/overview/[appId].tsx
index eafb727..4e96f47 100644
--- a/apps/expo/app/(tabs)/overview/[appId].tsx
+++ b/apps/expo/app/(tabs)/overview/[appId].tsx
@@ -173,7 +173,7 @@ const App = observer(() => {
}
%
{" "}
- of your attempts were on this app.
+ of your attempts were on {selectedApp.name}.
();
-
const appState = useRef(AppState.currentState);
-
- useEffect(() => {
- if (colorScheme !== currentColorScheme) {
- onColorSchemeChange.current = setTimeout(() => setCurrentColorScheme(colorScheme), 1000);
- } else if (onColorSchemeChange.current) {
- clearTimeout(onColorSchemeChange.current);
- }
- }, [colorScheme, currentColorScheme]);
-
useEffect(() => {
const checkShortcut = () => {
void listenForShortcut()
@@ -82,35 +70,42 @@ function RootLayoutNav() {
}, []);
return (
-
-
-
-
-
-
-
-
-
+
+
+
);
}
+
+const NavigationStack = () => {
+ const { theme } = useTheme();
+ return (
+
+
+
+
+
+
+
+ );
+};
diff --git a/apps/expo/app/settings/_layout.tsx b/apps/expo/app/settings/_layout.tsx
index 24d9813..e11d676 100644
--- a/apps/expo/app/settings/_layout.tsx
+++ b/apps/expo/app/settings/_layout.tsx
@@ -63,6 +63,18 @@ const SettingsLayout = observer(() => {
},
}}
/>
+
+
);
});
diff --git a/apps/expo/app/settings/app-icon.tsx b/apps/expo/app/settings/app-icon.tsx
new file mode 100644
index 0000000..d34753c
--- /dev/null
+++ b/apps/expo/app/settings/app-icon.tsx
@@ -0,0 +1,69 @@
+/* eslint-disable @typescript-eslint/no-var-requires */
+import { useState } from "react";
+import type { ImageURISource } from "react-native";
+import { getAppIcon, setAppIcon } from "expo-dynamic-app-icon";
+import { Check } from "@tamagui/lucide-icons";
+import { Image, ListItem, View, YGroup, YStack } from "tamagui";
+
+import { Container } from "../../components/container";
+
+const DarkIcon = require("../../assets/images/default.png") as ImageURISource;
+const DefaultIcon = require("../../assets/images/default.png") as ImageURISource;
+const LightIcon = require("../../assets/images/light.png") as ImageURISource;
+
+const icons = [
+ {
+ name: "Default",
+ value: "default",
+ source: DefaultIcon,
+ },
+ {
+ name: "Light",
+ value: "light",
+ source: LightIcon,
+ },
+ {
+ name: "Dark",
+ value: "dark",
+ source: DarkIcon,
+ },
+] as const;
+
+const AppIcon = () => {
+ const [activeIcon, setActiveIcon] = useState(getAppIcon().toLowerCase());
+
+ const setIcon = (value: (typeof icons)[number]["value"]) => {
+ setActiveIcon(value);
+ setAppIcon(value);
+ };
+
+ return (
+
+
+
+ {icons.map((icon) => (
+
+
+
+
+ }
+ onPress={() => {
+ void setIcon(icon.value);
+ }}
+ iconAfter={activeIcon === icon.value ? : undefined}
+ >
+ {icon.name}
+
+
+ ))}
+
+
+
+ );
+};
+
+export default AppIcon;
diff --git a/apps/expo/app/settings/index.tsx b/apps/expo/app/settings/index.tsx
index be6a4f1..cb4ff0a 100644
--- a/apps/expo/app/settings/index.tsx
+++ b/apps/expo/app/settings/index.tsx
@@ -38,6 +38,9 @@ const Settings = () => (
}
+ onPress={() => {
+ router.push("/settings/app-icon");
+ }}
iconAfter={ChevronRight}
>
{"App Icon"}
@@ -52,6 +55,9 @@ const Settings = () => (
}
+ onPress={() => {
+ router.push("/settings/theme");
+ }}
iconAfter={ChevronRight}
>
{"Theme"}
diff --git a/apps/expo/app/settings/theme.tsx b/apps/expo/app/settings/theme.tsx
new file mode 100644
index 0000000..6de4a35
--- /dev/null
+++ b/apps/expo/app/settings/theme.tsx
@@ -0,0 +1,52 @@
+/* eslint-disable @typescript-eslint/no-var-requires */
+import { Check, Moon, Smartphone, Sun } from "@tamagui/lucide-icons";
+import { ListItem, View, YGroup, YStack } from "tamagui";
+
+import { Container } from "../../components/container";
+import { useTheme } from "../../components/theme-provider";
+import { themeTypes } from "../../theme/theme-builder";
+
+const Theme = () => {
+ const { theme, setTheme, autoTheme } = useTheme();
+ return (
+
+
+
+ {(["auto", ...themeTypes] as const).map((themeType) => (
+
+
+ {themeType === "light" ? (
+
+ ) : themeType === "auto" ? (
+
+ ) : (
+
+ )}
+
+ }
+ onPress={() => {
+ setTheme(themeType);
+ }}
+ iconAfter={
+ (autoTheme && themeType === "auto") || (theme === themeType && !autoTheme) ? (
+
+ ) : undefined
+ }
+ >
+
+ {themeType === "light" ? "Light" : themeType === "auto" ? "Auto" : "Dark"}
+
+
+
+ ))}
+
+
+
+ );
+};
+
+export default Theme;
diff --git a/apps/expo/assets/images/dark.png b/apps/expo/assets/images/dark.png
new file mode 100644
index 0000000..c25baf8
Binary files /dev/null and b/apps/expo/assets/images/dark.png differ
diff --git a/apps/expo/assets/images/icon.png b/apps/expo/assets/images/default.png
similarity index 100%
rename from apps/expo/assets/images/icon.png
rename to apps/expo/assets/images/default.png
diff --git a/apps/expo/assets/images/light.png b/apps/expo/assets/images/light.png
new file mode 100644
index 0000000..b997d3d
Binary files /dev/null and b/apps/expo/assets/images/light.png differ
diff --git a/apps/expo/components/theme-provider.tsx b/apps/expo/components/theme-provider.tsx
new file mode 100644
index 0000000..0440f84
--- /dev/null
+++ b/apps/expo/components/theme-provider.tsx
@@ -0,0 +1,60 @@
+import { createContext, useContext, useEffect, useRef, useState } from "react";
+import { useColorScheme } from "react-native";
+import AsyncStorage from "@react-native-async-storage/async-storage";
+import { Theme } from "tamagui";
+
+export const ThemeContext = createContext<{
+ theme: ThemeType;
+ setTheme: (theme: ThemeType | "auto") => void;
+ autoTheme: boolean;
+}>({
+ theme: "light",
+ setTheme: () => {
+ console.warn("Missing ThemeProvider");
+ },
+ autoTheme: false,
+});
+
+export type ThemeType = "light" | "dark";
+
+export const useTheme = () => useContext(ThemeContext);
+
+export const ThemeProvider = ({ children }: { children: React.ReactNode }) => {
+ const [theme, setThemeState] = useState("light");
+ const [autoTheme, setAutoTheme] = useState(false);
+
+ const colorScheme = useColorScheme();
+ const [currentColorScheme, setCurrentColorScheme] = useState(colorScheme);
+ const onColorSchemeChange = useRef();
+
+ useEffect(() => {
+ const init = async () => {
+ if (colorScheme !== currentColorScheme) {
+ onColorSchemeChange.current = setTimeout(() => setCurrentColorScheme(colorScheme), 1000);
+ } else if (onColorSchemeChange.current) {
+ clearTimeout(onColorSchemeChange.current);
+ }
+ const storedTheme = await AsyncStorage.getItem("theme");
+ setThemeState(storedTheme as ThemeType);
+ if (storedTheme === "auto") {
+ setThemeState(colorScheme === "dark" ? "dark" : "light");
+ }
+ };
+ void init();
+ }, [colorScheme, currentColorScheme]);
+
+ const setTheme = (theme: ThemeType | "auto") => {
+ if (theme === "auto") {
+ setThemeState(colorScheme === "dark" ? "dark" : "light");
+ } else {
+ setThemeState(theme);
+ }
+ setAutoTheme(theme === "auto");
+ void AsyncStorage.setItem("theme", theme);
+ };
+ return (
+
+ {children}
+
+ );
+};
diff --git a/apps/expo/ios/Podfile.lock b/apps/expo/ios/Podfile.lock
index e800406..d20757c 100644
--- a/apps/expo/ios/Podfile.lock
+++ b/apps/expo/ios/Podfile.lock
@@ -77,7 +77,9 @@ PODS:
- React-Core
- ExpoBlur (12.6.0):
- ExpoModulesCore
- - ExpoCrypto (12.4.1):
+ - ExpoCrypto (12.6.0):
+ - ExpoModulesCore
+ - ExpoDynamicAppIcon (1.2.0):
- ExpoModulesCore
- ExpoExitApp (0.1.0):
- ExpoModulesCore
@@ -418,9 +420,9 @@ PODS:
- React-jsinspector (0.72.7)
- React-logger (0.72.7):
- glog
- - react-native-safe-area-context (4.7.4):
+ - react-native-safe-area-context (4.8.1):
- React-Core
- - react-native-skia (0.1.222):
+ - react-native-skia (0.1.230):
- RCT-Folly (= 2021.07.22.00)
- React
- React-callinvoker
@@ -537,41 +539,16 @@ PODS:
- React-perflogger (= 0.72.7)
- ReactNativeAvoidSoftinput (4.0.2):
- React-Core
- - RNCAsyncStorage (1.18.2):
+ - RNCAsyncStorage (1.21.0):
- React-Core
- RNGestureHandler (2.14.0):
- RCT-Folly (= 2021.07.22.00)
- React-Core
- - RNReanimated (3.5.4):
- - DoubleConversion
- - FBLazyVector
- - glog
- - hermes-engine
- - RCT-Folly
- - RCTRequired
- - RCTTypeSafety
- - React-callinvoker
+ - RNReanimated (3.6.1):
+ - RCT-Folly (= 2021.07.22.00)
- React-Core
- - React-Core/DevSupport
- - React-Core/RCTWebSocket
- - React-CoreModules
- - React-cxxreact
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-RCTActionSheet
- - React-RCTAnimation
- - React-RCTAppDelegate
- - React-RCTBlob
- - React-RCTImage
- - React-RCTLinking
- - React-RCTNetwork
- - React-RCTSettings
- - React-RCTText
- ReactCommon/turbomodule/core
- - Yoga
- - RNScreens (3.27.0):
+ - RNScreens (3.29.0):
- RCT-Folly (= 2021.07.22.00)
- React-Core
- RNSVG (13.9.0):
@@ -596,6 +573,7 @@ DEPENDENCIES:
- expo-dev-menu-interface (from `../node_modules/expo-dev-menu-interface/ios`)
- ExpoBlur (from `../../../node_modules/expo-blur/ios`)
- ExpoCrypto (from `../../../node_modules/expo-crypto/ios`)
+ - ExpoDynamicAppIcon (from `../../../node_modules/expo-dynamic-app-icon/ios`)
- ExpoExitApp (from `../../../packages/expo-exit-app/ios`)
- ExpoHead (from `../../../node_modules/expo-head/ios`)
- ExpoKeepAwake (from `../../../node_modules/expo-keep-awake/ios`)
@@ -693,6 +671,8 @@ EXTERNAL SOURCES:
:path: "../../../node_modules/expo-blur/ios"
ExpoCrypto:
:path: "../../../node_modules/expo-crypto/ios"
+ ExpoDynamicAppIcon:
+ :path: "../../../node_modules/expo-dynamic-app-icon/ios"
ExpoExitApp:
:path: "../../../packages/expo-exit-app/ios"
ExpoHead:
@@ -821,7 +801,8 @@ SPEC CHECKSUMS:
expo-dev-menu: 533fd5a1a9f9d717f193681afe0ffe91f4adef71
expo-dev-menu-interface: 25a94ce9bead4668f624732d1f981b1791bbe8e2
ExpoBlur: 9e6da7c2bd4a0c5de7e57124694d0a380d7962f7
- ExpoCrypto: a382ab9a2fa91f0b511ce1fe4d6baecee40a1615
+ ExpoCrypto: 42485127a5968dda6f67ac5f2b42d3c0af31d7db
+ ExpoDynamicAppIcon: b0f96e53d0bf00412bbe97da0cfc15b8c94a54ce
ExpoExitApp: 5ae87b4d35a0d3b28b5b26bdddcd734e0a41e7f3
ExpoHead: ac95331e2a45cb94f6aee8ba6b8cb3d0a2cc6817
ExpoKeepAwake: be4cbd52d9b177cde0fd66daa1913afa3161fc1d
@@ -853,8 +834,8 @@ SPEC CHECKSUMS:
React-jsiexecutor: c49502e5d02112247ee4526bc3ccfc891ae3eb9b
React-jsinspector: 8baadae51f01d867c3921213a25ab78ab4fbcd91
React-logger: 8edc785c47c8686c7962199a307015e2ce9a0e4f
- react-native-safe-area-context: 2cd91d532de12acdb0a9cbc8d43ac72a8e4c897c
- react-native-skia: 495324a576f26b5fb8d0dee8cc5137c02a491656
+ react-native-safe-area-context: cd1169d797a2ef722a00bfc5af10748d5b6c94f9
+ react-native-skia: a395bbbb438d593e525f65d0886c36d1c30f0604
React-NativeModulesApple: b6868ee904013a7923128892ee4a032498a1024a
React-perflogger: 31ea61077185eb1428baf60c0db6e2886f141a5a
React-RCTActionSheet: 392090a3abc8992eb269ef0eaa561750588fc39d
@@ -873,10 +854,10 @@ SPEC CHECKSUMS:
React-utils: 56838edeaaf651220d1e53cd0b8934fb8ce68415
ReactCommon: 5f704096ccf7733b390f59043b6fa9cc180ee4f6
ReactNativeAvoidSoftinput: b4ec4c8084c397a91800d21170a9949a263d288a
- RNCAsyncStorage: ddc4ee162bfd41b0d2c68bf2d95acd81dd7f1f93
+ RNCAsyncStorage: 618d03a5f52fbccb3d7010076bc54712844c18ef
RNGestureHandler: 32a01c29ecc9bb0b5bf7bc0a33547f61b4dc2741
- RNReanimated: 9633f8c2e214b721e35e371b473fbf3a1522948d
- RNScreens: 3c2d122f5e08c192e254c510b212306da97d2581
+ RNReanimated: c114c031ecae76049ad03aeb0f94a2243498a88d
+ RNScreens: 3c5b9f4a9dcde752466854b6109b79c0e205dad3
RNSVG: 53c661b76829783cdaf9b7a57258f3d3b4c28315
SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
Yoga: 4c3aa327e4a6a23eeacd71f61c81df1bcdf677d5
diff --git a/apps/expo/ios/digitalbreak.xcodeproj/project.pbxproj b/apps/expo/ios/digitalbreak.xcodeproj/project.pbxproj
index c043671..4d511cf 100644
--- a/apps/expo/ios/digitalbreak.xcodeproj/project.pbxproj
+++ b/apps/expo/ios/digitalbreak.xcodeproj/project.pbxproj
@@ -7,37 +7,43 @@
objects = {
/* Begin PBXBuildFile section */
+ 0286CE11073C4D2498B22C82 /* dark-Icon-60x60@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 91CF5364FA2F4BC4BED19C2C /* dark-Icon-60x60@2x.png */; };
13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
+ 2FAD3E6EC2B5420FBD418B87 /* intents.appex in Embed ExtensionKit Extensions */ = {isa = PBXBuildFile; fileRef = 554346899AFE4B89832B1E81 /* intents.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };
- 4BBC3567BBA64BA7983DA698 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE26E28CC3940BEAE90E53A /* noop-file.swift */; };
- 7938B5847743476CB9F9BCA1 /* AppIntents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E29AB4C4AC844DEB6414129 /* AppIntents.framework */; };
- 8B329E5D5B1447E3A68A9E56 /* intents.appex in Embed ExtensionKit Extensions */ = {isa = PBXBuildFile; fileRef = 7BCAC1412DF84AAD9A6C1C03 /* intents.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ 48A6E22D5DB6447F9EA8AB95 /* DigitalBreak.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98EA6A305BE24FC89E8A245B /* DigitalBreak.swift */; };
+ 7660B33B1D544CCBB6976770 /* AppIntents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BC838653C7D4986A1FE0B74 /* AppIntents.framework */; };
+ 7A665944C6064575B80FBDA5 /* dark-Icon-60x60@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8CD83983CC0A4D21AB39DFEE /* dark-Icon-60x60@3x.png */; };
+ 90E4887F1A5E48FD8375DC3E /* light-Icon-60x60@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2D5D04E3364740A8B1759494 /* light-Icon-60x60@3x.png */; };
96905EF65AED1B983A6B3ABC /* libPods-digitalbreak.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-digitalbreak.a */; };
- 9F8CB6D31EA44EAA88707E05 /* DigitalBreak.swift in Sources */ = {isa = PBXBuildFile; fileRef = 442C1736CE0B4EB3978B9B2A /* DigitalBreak.swift */; };
+ 974A1B48957E46AC81362DC5 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C16DE68AA1C49438FEA7C46 /* noop-file.swift */; };
+ AF794342B2CE41E48CC283DE /* default-Icon-60x60@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EE680FFD290A435DA88F5FF4 /* default-Icon-60x60@2x.png */; };
B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };
BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };
+ C54E0D0231B74179B5812FEF /* default-Icon-60x60@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = B1BA4ED51CD44748805E0821 /* default-Icon-60x60@3x.png */; };
+ FE7DC0C21C704A83BA159BF8 /* light-Icon-60x60@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F30FEEFC000549B5AAF7E982 /* light-Icon-60x60@2x.png */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
- 6B8C268342B149389968EDC0 /* PBXContainerItemProxy */ = {
+ D6C45556A28146ACBB297EA9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = 5856AC32926B43C694F0C73D;
+ remoteGlobalIDString = FC5BE8E742F84D84B399D6B7;
remoteInfo = intents;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
- 09549985EFEE4ABBAAA2070E /* Embed ExtensionKit Extensions */ = {
+ F4F0316D58E94016B04CFB8B /* Embed ExtensionKit Extensions */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 8;
dstPath = "$(EXTENSIONS_FOLDER_PATH)";
dstSubfolderSpec = 16;
files = (
- 8B329E5D5B1447E3A68A9E56 /* intents.appex in Embed ExtensionKit Extensions */,
+ 2FAD3E6EC2B5420FBD418B87 /* intents.appex in Embed ExtensionKit Extensions */,
);
name = "Embed ExtensionKit Extensions";
runOnlyForDeploymentPostprocessing = 1;
@@ -45,25 +51,30 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
- 0E29AB4C4AC844DEB6414129 /* AppIntents.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; fileEncoding = 4; includeInIndex = 0; name = AppIntents.framework; path = System/Library/Frameworks/AppIntents.framework; sourceTree = SDKROOT; };
13B07F961A680F5B00A75B9A /* digitalbreak.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; fileEncoding = 4; includeInIndex = 0; path = digitalbreak.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = digitalbreak/AppDelegate.h; sourceTree = ""; };
13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = digitalbreak/AppDelegate.mm; sourceTree = ""; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = digitalbreak/Images.xcassets; sourceTree = ""; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = text.plist.xml; name = Info.plist; path = digitalbreak/Info.plist; sourceTree = ""; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = main.m; path = digitalbreak/main.m; sourceTree = ""; };
- 3CDAFC88EDA14A2DA445EEE5 /* digitalbreak-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "digitalbreak-Bridging-Header.h"; path = "digitalbreak/digitalbreak-Bridging-Header.h"; sourceTree = ""; };
- 442C1736CE0B4EB3978B9B2A /* DigitalBreak.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; path = DigitalBreak.swift; sourceTree = ""; };
- 516F2C6A6AB44B6D8CC34B64 /* AppIntents.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; fileEncoding = 4; includeInIndex = 0; name = AppIntents.framework; path = System/Library/Frameworks/AppIntents.framework; sourceTree = SDKROOT; };
- 54029F4F10304E43B30A7A13 /* Info.plist */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 1BC838653C7D4986A1FE0B74 /* AppIntents.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; fileEncoding = 4; includeInIndex = 1; name = AppIntents.framework; path = System/Library/Frameworks/AppIntents.framework; sourceTree = SDKROOT; };
+ 2D5D04E3364740A8B1759494 /* light-Icon-60x60@3x.png */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "light-Icon-60x60@3x.png"; path = "digitalbreak/DynamicAppIcons/light-Icon-60x60@3x.png"; sourceTree = ""; };
+ 3C16DE68AA1C49438FEA7C46 /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "digitalbreak/noop-file.swift"; sourceTree = ""; };
+ 554346899AFE4B89832B1E81 /* intents.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.extensionkit-extension"; fileEncoding = 4; includeInIndex = 0; path = intents.appex; sourceTree = BUILT_PRODUCTS_DIR; };
58EEBF8E8E6FB1BC6CAF49B5 /* libPods-digitalbreak.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; fileEncoding = 4; includeInIndex = 0; path = "libPods-digitalbreak.a"; sourceTree = BUILT_PRODUCTS_DIR; };
6C2E3173556A471DD304B334 /* Pods-digitalbreak.debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-digitalbreak.debug.xcconfig"; path = "Target Support Files/Pods-digitalbreak/Pods-digitalbreak.debug.xcconfig"; sourceTree = ""; };
7A4D352CD337FB3A3BF06240 /* Pods-digitalbreak.release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-digitalbreak.release.xcconfig"; path = "Target Support Files/Pods-digitalbreak/Pods-digitalbreak.release.xcconfig"; sourceTree = ""; };
- 7BCAC1412DF84AAD9A6C1C03 /* intents.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.extensionkit-extension"; fileEncoding = 4; includeInIndex = 0; path = intents.appex; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8BD8FA6226FB456086FC1623 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 8CD83983CC0A4D21AB39DFEE /* dark-Icon-60x60@3x.png */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "dark-Icon-60x60@3x.png"; path = "digitalbreak/DynamicAppIcons/dark-Icon-60x60@3x.png"; sourceTree = ""; };
+ 91CF5364FA2F4BC4BED19C2C /* dark-Icon-60x60@2x.png */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "dark-Icon-60x60@2x.png"; path = "digitalbreak/DynamicAppIcons/dark-Icon-60x60@2x.png"; sourceTree = ""; };
+ 98EA6A305BE24FC89E8A245B /* DigitalBreak.swift */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; path = DigitalBreak.swift; sourceTree = ""; };
AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = digitalbreak/SplashScreen.storyboard; sourceTree = ""; };
+ B1BA4ED51CD44748805E0821 /* default-Icon-60x60@3x.png */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "default-Icon-60x60@3x.png"; path = "digitalbreak/DynamicAppIcons/default-Icon-60x60@3x.png"; sourceTree = ""; };
BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; };
- DAE26E28CC3940BEAE90E53A /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "digitalbreak/noop-file.swift"; sourceTree = ""; };
- ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
+ C584B4737FA1432792D9E538 /* digitalbreak-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "digitalbreak-Bridging-Header.h"; path = "digitalbreak/digitalbreak-Bridging-Header.h"; sourceTree = ""; };
+ ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 1; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
+ EE680FFD290A435DA88F5FF4 /* default-Icon-60x60@2x.png */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "default-Icon-60x60@2x.png"; path = "digitalbreak/DynamicAppIcons/default-Icon-60x60@2x.png"; sourceTree = ""; };
+ F30FEEFC000549B5AAF7E982 /* light-Icon-60x60@2x.png */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "light-Icon-60x60@2x.png"; path = "digitalbreak/DynamicAppIcons/light-Icon-60x60@2x.png"; sourceTree = ""; };
FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-digitalbreak/ExpoModulesProvider.swift"; sourceTree = ""; };
/* End PBXFileReference section */
@@ -76,11 +87,11 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
- 147AC6ACC0E945AE83B55AA7 /* Frameworks */ = {
+ 4EA9C669808F4291AE231055 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 7938B5847743476CB9F9BCA1 /* AppIntents.framework in Frameworks */,
+ 7660B33B1D544CCBB6976770 /* AppIntents.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -97,40 +108,23 @@
13B07FB61A68108700A75B9A /* Info.plist */,
13B07FB71A68108700A75B9A /* main.m */,
AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,
- DAE26E28CC3940BEAE90E53A /* noop-file.swift */,
- 3CDAFC88EDA14A2DA445EEE5 /* digitalbreak-Bridging-Header.h */,
+ 3C16DE68AA1C49438FEA7C46 /* noop-file.swift */,
+ C584B4737FA1432792D9E538 /* digitalbreak-Bridging-Header.h */,
+ FD82CECE80704193B6196BA8 /* DynamicAppIcons */,
);
name = digitalbreak;
sourceTree = "";
};
- 181A959DDB5B4BC6902ACB63 /* intents */ = {
- isa = PBXGroup;
- children = (
- 442C1736CE0B4EB3978B9B2A /* DigitalBreak.swift */,
- 54029F4F10304E43B30A7A13 /* Info.plist */,
- );
- name = intents;
- path = ../targets/intents;
- sourceTree = "";
- };
2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
isa = PBXGroup;
children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
58EEBF8E8E6FB1BC6CAF49B5 /* libPods-digitalbreak.a */,
- 516F2C6A6AB44B6D8CC34B64 /* AppIntents.framework */,
+ 1BC838653C7D4986A1FE0B74 /* AppIntents.framework */,
);
name = Frameworks;
sourceTree = "";
};
- 512BF811824E44E58A1134C8 /* expo:targets */ = {
- isa = PBXGroup;
- children = (
- 181A959DDB5B4BC6902ACB63 /* intents */,
- );
- name = "expo:targets";
- sourceTree = "";
- };
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
isa = PBXGroup;
children = (
@@ -141,14 +135,13 @@
83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup;
children = (
- 512BF811824E44E58A1134C8 /* expo:targets */,
+ B88160DAD9AF4BD6A1997B66 /* expo:targets */,
13B07FAE1A68108700A75B9A /* digitalbreak */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
D65327D7A22EEC0BE12398D9 /* Pods */,
D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,
- A351CE0D2B1CA20E00B345BA /* Recovered References */,
);
indentWidth = 2;
sourceTree = "";
@@ -159,7 +152,7 @@
isa = PBXGroup;
children = (
13B07F961A680F5B00A75B9A /* digitalbreak.app */,
- 7BCAC1412DF84AAD9A6C1C03 /* intents.appex */,
+ 554346899AFE4B89832B1E81 /* intents.appex */,
);
name = Products;
sourceTree = "";
@@ -172,12 +165,12 @@
name = digitalbreak;
sourceTree = "";
};
- A351CE0D2B1CA20E00B345BA /* Recovered References */ = {
+ B88160DAD9AF4BD6A1997B66 /* expo:targets */ = {
isa = PBXGroup;
children = (
- 0E29AB4C4AC844DEB6414129 /* AppIntents.framework */,
+ F508963B7FB94B289802F01A /* intents */,
);
- name = "Recovered References";
+ name = "expo:targets";
sourceTree = "";
};
BB2F792B24A3F905000567C9 /* Supporting */ = {
@@ -206,6 +199,29 @@
name = ExpoModulesProviders;
sourceTree = "";
};
+ F508963B7FB94B289802F01A /* intents */ = {
+ isa = PBXGroup;
+ children = (
+ 98EA6A305BE24FC89E8A245B /* DigitalBreak.swift */,
+ 8BD8FA6226FB456086FC1623 /* Info.plist */,
+ );
+ name = intents;
+ path = ../targets/intents;
+ sourceTree = "";
+ };
+ FD82CECE80704193B6196BA8 /* DynamicAppIcons */ = {
+ isa = PBXGroup;
+ children = (
+ EE680FFD290A435DA88F5FF4 /* default-Icon-60x60@2x.png */,
+ B1BA4ED51CD44748805E0821 /* default-Icon-60x60@3x.png */,
+ F30FEEFC000549B5AAF7E982 /* light-Icon-60x60@2x.png */,
+ 2D5D04E3364740A8B1759494 /* light-Icon-60x60@3x.png */,
+ 91CF5364FA2F4BC4BED19C2C /* dark-Icon-60x60@2x.png */,
+ 8CD83983CC0A4D21AB39DFEE /* dark-Icon-60x60@3x.png */,
+ );
+ name = DynamicAppIcons;
+ sourceTree = "";
+ };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -215,32 +231,32 @@
buildPhases = (
08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */,
FD10A7F022414F080027D42C /* Start Packager */,
- 123B2D70D505FCA0DAC761CF /* [Expo] Configure project */,
+ 1712F04C278E1CC457A1C805 /* [Expo] Configure project */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */,
- 09549985EFEE4ABBAAA2070E /* Embed ExtensionKit Extensions */,
- 8E7CF891DD96A98A74BD57A7 /* [CP] Embed Pods Frameworks */,
+ F4F0316D58E94016B04CFB8B /* Embed ExtensionKit Extensions */,
+ BFFE7928A87255B08BD62F1B /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
dependencies = (
- 784FD26B996541C3A64F2F7F /* PBXTargetDependency */,
+ 187C545CF7D845408597E681 /* PBXTargetDependency */,
);
name = digitalbreak;
productName = digitalbreak;
productReference = 13B07F961A680F5B00A75B9A /* digitalbreak.app */;
productType = "com.apple.product-type.application";
};
- 5856AC32926B43C694F0C73D /* intents */ = {
+ FC5BE8E742F84D84B399D6B7 /* intents */ = {
isa = PBXNativeTarget;
- buildConfigurationList = BCDAF73BCD204C16B67E415F /* Build configuration list for PBXNativeTarget "intents" */;
+ buildConfigurationList = 760BEDB1335E478C8502118D /* Build configuration list for PBXNativeTarget "intents" */;
buildPhases = (
- 7FEB53A6D1974017A7C7BFBA /* Sources */,
- 147AC6ACC0E945AE83B55AA7 /* Frameworks */,
- F8E07367BBD7495A9CD037E6 /* Resources */,
+ 6BAE06EDD02F46418056BF14 /* Sources */,
+ 4EA9C669808F4291AE231055 /* Frameworks */,
+ C96A8DF6D6AC46E4AFBD865E /* Resources */,
);
buildRules = (
);
@@ -248,7 +264,7 @@
);
name = intents;
productName = intents;
- productReference = 7BCAC1412DF84AAD9A6C1C03 /* intents.appex */;
+ productReference = 554346899AFE4B89832B1E81 /* intents.appex */;
productType = "com.apple.product-type.extensionkit-extension";
};
/* End PBXNativeTarget section */
@@ -262,7 +278,7 @@
13B07F861A680F5B00A75B9A = {
LastSwiftMigration = 1250;
};
- 5856AC32926B43C694F0C73D = {
+ FC5BE8E742F84D84B399D6B7 = {
CreatedOnToolsVersion = 14.3;
DevelopmentTeam = 3X5J8LXMDM;
ProvisioningStyle = Automatic;
@@ -283,7 +299,7 @@
projectRoot = "";
targets = (
13B07F861A680F5B00A75B9A /* digitalbreak */,
- 5856AC32926B43C694F0C73D /* intents */,
+ FC5BE8E742F84D84B399D6B7 /* intents */,
);
};
/* End PBXProject section */
@@ -296,10 +312,16 @@
BB2F792D24A3F905000567C9 /* Expo.plist in Resources */,
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */,
+ AF794342B2CE41E48CC283DE /* default-Icon-60x60@2x.png in Resources */,
+ C54E0D0231B74179B5812FEF /* default-Icon-60x60@3x.png in Resources */,
+ FE7DC0C21C704A83BA159BF8 /* light-Icon-60x60@2x.png in Resources */,
+ 90E4887F1A5E48FD8375DC3E /* light-Icon-60x60@3x.png in Resources */,
+ 0286CE11073C4D2498B22C82 /* dark-Icon-60x60@2x.png in Resources */,
+ 7A665944C6064575B80FBDA5 /* dark-Icon-60x60@3x.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- F8E07367BBD7495A9CD037E6 /* Resources */ = {
+ C96A8DF6D6AC46E4AFBD865E /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -349,7 +371,7 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- 123B2D70D505FCA0DAC761CF /* [Expo] Configure project */ = {
+ 1712F04C278E1CC457A1C805 /* [Expo] Configure project */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
@@ -392,7 +414,7 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-digitalbreak/Pods-digitalbreak-resources.sh\"\n";
showEnvVarsInLog = 0;
};
- 8E7CF891DD96A98A74BD57A7 /* [CP] Embed Pods Frameworks */ = {
+ BFFE7928A87255B08BD62F1B /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -439,12 +461,12 @@
13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
13B07FC11A68108700A75B9A /* main.m in Sources */,
B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,
- 4BBC3567BBA64BA7983DA698 /* noop-file.swift in Sources */,
- 9F8CB6D31EA44EAA88707E05 /* DigitalBreak.swift in Sources */,
+ 974A1B48957E46AC81362DC5 /* noop-file.swift in Sources */,
+ 48A6E22D5DB6447F9EA8AB95 /* DigitalBreak.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- 7FEB53A6D1974017A7C7BFBA /* Sources */ = {
+ 6BAE06EDD02F46418056BF14 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -454,15 +476,15 @@
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
- 784FD26B996541C3A64F2F7F /* PBXTargetDependency */ = {
+ 187C545CF7D845408597E681 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- target = 5856AC32926B43C694F0C73D /* intents */;
- targetProxy = 6B8C268342B149389968EDC0 /* PBXContainerItemProxy */;
+ target = FC5BE8E742F84D84B399D6B7 /* intents */;
+ targetProxy = D6C45556A28146ACBB297EA9 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
- 022E0A3A9DC143A3972AD7A5 /* Release */ = {
+ 11628F30DFE04BA69E3DB310 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
@@ -572,53 +594,6 @@
};
name = Release;
};
- 2C822EBCB6F9405C95C6A2D7 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
- CLANG_ENABLE_OBJC_WEAK = YES;
- CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
- CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
- CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
- CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
- DEBUG_INFORMATION_FORMAT = dwarf;
- DEVELOPMENT_TEAM = 3X5J8LXMDM;
- ENABLE_USER_SCRIPT_SANDBOXING = YES;
- GCC_C_LANGUAGE_STANDARD = gnu17;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GENERATE_INFOPLIST_FILE = YES;
- INFOPLIST_FILE = ../targets/intents/Info.plist;
- INFOPLIST_KEY_CFBundleDisplayName = intents;
- INFOPLIST_KEY_NSHumanReadableCopyright = "";
- IPHONEOS_DEPLOYMENT_TARGET = 17.0;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- "@executable_path/../../Frameworks",
- );
- LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
- MARKETING_VERSION = 1.0.0;
- MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
- MTL_FAST_MATH = YES;
- OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
- PRODUCT_BUNDLE_IDENTIFIER = com.lukesthl.digitalbreak.intents;
- PRODUCT_NAME = "$(TARGET_NAME)";
- SKIP_INSTALL = YES;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
- SWIFT_EMIT_LOC_STRINGS = YES;
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Debug;
- };
83CBBA201A601CBA00E9B192 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -753,6 +728,53 @@
};
name = Release;
};
+ A807625EE8DD4BD1BA12E95D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ DEVELOPMENT_TEAM = 3X5J8LXMDM;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = ../targets/intents/Info.plist;
+ INFOPLIST_KEY_CFBundleDisplayName = intents;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@executable_path/../../Frameworks",
+ );
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MARKETING_VERSION = 1.0.0;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
+ PRODUCT_BUNDLE_IDENTIFIER = com.lukesthl.digitalbreak.intents;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
@@ -765,20 +787,20 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "digitalbreak" */ = {
+ 760BEDB1335E478C8502118D /* Build configuration list for PBXNativeTarget "intents" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 83CBBA201A601CBA00E9B192 /* Debug */,
- 83CBBA211A601CBA00E9B192 /* Release */,
+ A807625EE8DD4BD1BA12E95D /* Debug */,
+ 11628F30DFE04BA69E3DB310 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- BCDAF73BCD204C16B67E415F /* Build configuration list for PBXNativeTarget "intents" */ = {
+ 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "digitalbreak" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 2C822EBCB6F9405C95C6A2D7 /* Debug */,
- 022E0A3A9DC143A3972AD7A5 /* Release */,
+ 83CBBA201A601CBA00E9B192 /* Debug */,
+ 83CBBA211A601CBA00E9B192 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
diff --git a/apps/expo/ios/digitalbreak/DynamicAppIcons/dark-Icon-60x60@2x.png b/apps/expo/ios/digitalbreak/DynamicAppIcons/dark-Icon-60x60@2x.png
new file mode 100644
index 0000000..cbd55d9
Binary files /dev/null and b/apps/expo/ios/digitalbreak/DynamicAppIcons/dark-Icon-60x60@2x.png differ
diff --git a/apps/expo/ios/digitalbreak/DynamicAppIcons/dark-Icon-60x60@3x.png b/apps/expo/ios/digitalbreak/DynamicAppIcons/dark-Icon-60x60@3x.png
new file mode 100644
index 0000000..3bc7938
Binary files /dev/null and b/apps/expo/ios/digitalbreak/DynamicAppIcons/dark-Icon-60x60@3x.png differ
diff --git a/apps/expo/ios/digitalbreak/DynamicAppIcons/default-Icon-60x60@2x.png b/apps/expo/ios/digitalbreak/DynamicAppIcons/default-Icon-60x60@2x.png
new file mode 100644
index 0000000..a841632
Binary files /dev/null and b/apps/expo/ios/digitalbreak/DynamicAppIcons/default-Icon-60x60@2x.png differ
diff --git a/apps/expo/ios/digitalbreak/DynamicAppIcons/default-Icon-60x60@3x.png b/apps/expo/ios/digitalbreak/DynamicAppIcons/default-Icon-60x60@3x.png
new file mode 100644
index 0000000..2be899e
Binary files /dev/null and b/apps/expo/ios/digitalbreak/DynamicAppIcons/default-Icon-60x60@3x.png differ
diff --git a/apps/expo/ios/digitalbreak/DynamicAppIcons/light-Icon-60x60@2x.png b/apps/expo/ios/digitalbreak/DynamicAppIcons/light-Icon-60x60@2x.png
new file mode 100644
index 0000000..665a82f
Binary files /dev/null and b/apps/expo/ios/digitalbreak/DynamicAppIcons/light-Icon-60x60@2x.png differ
diff --git a/apps/expo/ios/digitalbreak/DynamicAppIcons/light-Icon-60x60@3x.png b/apps/expo/ios/digitalbreak/DynamicAppIcons/light-Icon-60x60@3x.png
new file mode 100644
index 0000000..7975043
Binary files /dev/null and b/apps/expo/ios/digitalbreak/DynamicAppIcons/light-Icon-60x60@3x.png differ
diff --git a/apps/expo/ios/digitalbreak/Info.plist b/apps/expo/ios/digitalbreak/Info.plist
index fc3ef56..f9881a7 100644
--- a/apps/expo/ios/digitalbreak/Info.plist
+++ b/apps/expo/ios/digitalbreak/Info.plist
@@ -10,6 +10,86 @@
digitalbreak
CFBundleExecutable
$(EXECUTABLE_NAME)
+ CFBundleIcons
+
+ CFBundleAlternateIcons
+
+ default
+
+ CFBundleIconFiles
+
+ default-Icon-60x60
+
+ UIPrerenderedIcon
+
+
+ light
+
+ CFBundleIconFiles
+
+ light-Icon-60x60
+
+ UIPrerenderedIcon
+
+
+ dark
+
+ CFBundleIconFiles
+
+ dark-Icon-60x60
+
+ UIPrerenderedIcon
+
+
+
+ CFBundlePrimaryIcon
+
+ CFBundleIconFiles
+
+ AppIcon
+
+
+
+ CFBundleIcons~ipad
+
+ CFBundleAlternateIcons
+
+ default
+
+ CFBundleIconFiles
+
+ default-Icon-60x60
+
+ UIPrerenderedIcon
+
+
+ light
+
+ CFBundleIconFiles
+
+ light-Icon-60x60
+
+ UIPrerenderedIcon
+
+
+ dark
+
+ CFBundleIconFiles
+
+ dark-Icon-60x60
+
+ UIPrerenderedIcon
+
+
+
+ CFBundlePrimaryIcon
+
+ CFBundleIconFiles
+
+ AppIcon
+
+
+
CFBundleIdentifier
$(PRODUCT_BUNDLE_IDENTIFIER)
CFBundleInfoDictionaryVersion
diff --git a/apps/expo/package.json b/apps/expo/package.json
index 82e3960..50a38f1 100644
--- a/apps/expo/package.json
+++ b/apps/expo/package.json
@@ -46,6 +46,7 @@
"expo-crypto": "~12.6.0",
"expo-dev-client": "~2.4.12",
"expo-dev-launcher": "^3.1.0",
+ "expo-dynamic-app-icon": "^1.2.0",
"expo-font": "~11.6.0",
"expo-linear-gradient": "~12.5.0",
"expo-linking": "~6.0.0",
diff --git a/apps/expo/theme/theme-builder.ts b/apps/expo/theme/theme-builder.ts
index c5e6d06..7fd253d 100644
--- a/apps/expo/theme/theme-builder.ts
+++ b/apps/expo/theme/theme-builder.ts
@@ -3,18 +3,14 @@ import { componentThemeDefinitions, maskOptions, masks, palettes, shadows, templ
import { darkColors, lightColors } from "./tokens";
-const colorThemeDefinition = (colorName: string) => [
- {
- parent: "light",
- palette: colorName,
- template: "colorLight",
- },
- {
- parent: "dark",
+export const themeTypes = ["light", "dark"] as const;
+
+const colorThemeDefinition = (colorName: string) =>
+ themeTypes.map((themeName) => ({
+ parent: themeName,
palette: colorName,
- template: "base",
- },
-];
+ template: themeName === "light" ? "colorLight" : "base",
+ }));
const themesBuilder = createThemeBuilder()
.addPalettes(palettes)