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)