Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion .expo/devices.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
{
"devices": []
"devices": [
{
"installationId": "F0B2F989-D042-4D9B-BE7C-8D09B00BD4C5",
"lastUsed": 1758012043849
}
]
Comment on lines +2 to +7
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๐Ÿ› ๏ธ Refactor suggestion | ๐ŸŸ  Major

๐Ÿงฉ Analysis chain

๋กœ์ปฌ ๋””๋ฐ”์ด์Šค ์ถ”์  ๋ฐ์ดํ„ฐ ์ปค๋ฐ‹ ํ™•์ธ

์ด ํŒŒ์ผ์€ ๊ฐœ๋ฐœ์ž์˜ ๋กœ์ปฌ ๋””๋ฐ”์ด์Šค ์ •๋ณด๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ .expo/ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๊ฐœ๋ฐœ์ž๋ณ„ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ ๋ฒ„์ „ ๊ด€๋ฆฌ์—์„œ ์ œ์™ธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, lastUsed ํƒ€์ž„์Šคํƒฌํ”„(1758012043849)๊ฐ€ 2025๋…„ 10์›” ์ดํ›„์˜ ๋ฏธ๋ž˜ ๋‚ ์งœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š”๋ฐ, ์ด๋Š” ํ˜„์žฌ ๋‚ ์งœ(2025๋…„ 10์›”)์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”.


๐Ÿ Script executed:

#!/bin/bash
# .gitignore์— .expo๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
if [ -f ".gitignore" ]; then
  if grep -q "\.expo" .gitignore; then
    echo ".gitignore์— .expo๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค"
  else
    echo "๊ฒฝ๊ณ : .gitignore์— .expo๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค"
  fi
else
  echo ".gitignore ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"
fi

Length of output: 27


.expo/ ๋””๋ ‰ํ† ๋ฆฌ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ œ์™ธ ๋ฐ devices.json ์ œ๊ฑฐ ํ•„์š”

  • .gitignore์— .expo/ ์ถ”๊ฐ€
  • ์ปค๋ฐ‹๋œ .expo/devices.json ํŒŒ์ผ ์‚ญ์ œ
  • lastUsed ํƒ€์ž„์Šคํƒฌํ”„(1758012043849)๊ฐ€ ๋ฏธ๋ž˜ ๋‚ ์งœ์ด๋ฏ€๋กœ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์ธ์ง€ ํ™•์ธ ๋ฐ ์ˆ˜์ •
๐Ÿค– Prompt for AI Agents
In .expo/devices.json around lines 2 to 7: this file under .expo/ was committed
but the .expo/ directory should be ignored; add ".expo/" to .gitignore, remove
the committed .expo/devices.json from the repository (git rm --cached or delete
+ commit) so it no longer tracks, and verify the lastUsed value (1758012043849)
โ€” if it was test data or a future timestamp, replace with a realistic epoch
millis or remove the file entirely before committing the cleanup.

}
8 changes: 8 additions & 0 deletions .expo/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"hostType": "lan",
"lanType": "ip",
"dev": true,
"minify": false,
"urlRandomness": null,
"https": false
}
Comment on lines +1 to +8
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

โš ๏ธ Potential issue | ๐Ÿ”ด Critical

๐Ÿงฉ Analysis chain

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ ์ปค๋ฐ‹ ํ™•์ธ

์ด ํŒŒ์ผ์€ ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (dev: true, minify: false, https: false). ์ผ๋ฐ˜์ ์œผ๋กœ .expo/ ๋””๋ ‰ํ† ๋ฆฌ๋Š” .gitignore์— ํฌํ•จ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋ณ„ ์„ค์ •์ด ์ €์žฅ์†Œ์— ์ปค๋ฐ‹๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ .gitignore ํŒŒ์ผ์— .expo/ ํ•ญ๋ชฉ์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์ด ํŒŒ์ผ์„ ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒƒ์ด ์˜๋„๋œ ๊ฒƒ์ธ์ง€ ๊ฒ€์ฆํ•˜์„ธ์š”.


๐Ÿ Script executed:

#!/bin/bash
# .gitignore์— .expo๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
if [ -f ".gitignore" ]; then
  if grep -q "\.expo" .gitignore; then
    echo ".gitignore์— .expo๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค"
  else
    echo "๊ฒฝ๊ณ : .gitignore์— .expo๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค"
  fi
else
  echo ".gitignore ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"
fi

Length of output: 27



.expo/settings.json ํŒŒ์ผ์„ .gitignore์— ์ถ”๊ฐ€ํ•˜์„ธ์š”

.expo/ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ .gitignore์— ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. settings.json์€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ(dev: true, minify: false, https: false)์ด๋ฉฐ, ์ด๋Ÿฌํ•œ ๋กœ์ปฌ ์„ค์ • ํŒŒ์ผ์€ ๋ฒ„์ „ ๊ด€๋ฆฌ ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. .gitignore์— .expo/ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ์ด๋ฏธ ์ปค๋ฐ‹๋œ ๊ฒฝ์šฐ ์ €์žฅ์†Œ์—์„œ ์ œ๊ฑฐํ•˜์„ธ์š”.

๐Ÿค– Prompt for AI Agents
In .expo/settings.json (lines 1-8): this is a local dev config that should not
be committed; add a .expo/ entry to .gitignore (or ensure .expo/ exists in
.gitignore) and if the directory was already committed remove it from the repo
index without deleting local files (e.g., git rm --cached -r .expo && commit the
change), then push so the settings.json is no longer tracked.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
190 changes: 169 additions & 21 deletions App.js
Original file line number Diff line number Diff line change
@@ -1,38 +1,186 @@
import 'react-native-gesture-handler';
import React, { useEffect, useRef } from 'react';
import { NavigationContainer } from '@react-navigation/native';
import StackNavigator from './src/navigation/StackNavigator';
import { setupNotificationListeners } from './src/services/PushNotificationService';
// App.js
import "react-native-gesture-handler";
import React, { useEffect, useRef } from "react";
import { Platform } from "react-native";
import { NavigationContainer } from "@react-navigation/native";
import * as Device from "expo-device";
import * as Notifications from "expo-notifications";
import StackNavigator from "./src/navigation/StackNavigator";

// Push ์„œ๋น„์Šค
import {
setupNotificationListeners,
registerExpoPushToken,
} from "./src/services/PushNotificationService";

// ๐ŸŽจ ThemeProvider ์ถ”๊ฐ€
import { ThemeProvider } from "./src/utils/ThemeContext";

const SHOW_WELCOME_ON_LAUNCH = true;

// ============================================
// ์ „์—ญ Notification Handler
// ============================================
console.log("[Push] setNotificationHandler: init");
Notifications.setNotificationHandler({
handleNotification: async () => {
console.log("[Push] handleNotification called (foreground display enabled)");
return {
shouldShowBanner: true,
shouldShowList: true,
shouldPlaySound: true,
shouldSetBadge: true,
};
},
});
Comment on lines +25 to +35
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

โš ๏ธ Potential issue | ๐Ÿ”ด Critical

expo-notifications Notification Handler ํ‚ค ์‚ฌ์šฉ ์˜ค๋ฅ˜

Expo๋Š” shouldShowAlert/shouldPlaySound/shouldSetBadge๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. shouldShowBanner/shouldShowList๋Š” ๋ฌด์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 Notifications.setNotificationHandler({
   handleNotification: async () => {
-    console.log("[Push] handleNotification called (foreground display enabled)");
-    return {
-      shouldShowBanner: true,
-      shouldShowList: true,
-      shouldPlaySound: true,
-      shouldSetBadge: true,
-    };
+    console.log("[Push] handleNotification (fg alert enabled)");
+    return {
+      shouldShowAlert: true,
+      shouldPlaySound: true,
+      shouldSetBadge: true,
+    };
   },
 });
๐Ÿ“ Committable suggestion

โ€ผ๏ธ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Notifications.setNotificationHandler({
handleNotification: async () => {
console.log("[Push] handleNotification called (foreground display enabled)");
return {
shouldShowBanner: true,
shouldShowList: true,
shouldPlaySound: true,
shouldSetBadge: true,
};
},
});
Notifications.setNotificationHandler({
handleNotification: async () => {
console.log("[Push] handleNotification (fg alert enabled)");
return {
shouldShowAlert: true,
shouldPlaySound: true,
shouldSetBadge: true,
};
},
});
๐Ÿค– Prompt for AI Agents
In App.js around lines 25 to 35, the Notification handler is returning keys
(shouldShowBanner, shouldShowList, shouldPlaySound, shouldSetBadge) that Expo
ignores; replace them with the expected keys shouldShowAlert, shouldPlaySound,
and shouldSetBadge (and/or shouldSetBadge as needed) so the notification display
behavior works correctly; update the returned object to include shouldShowAlert:
true, shouldPlaySound: true, shouldSetBadge: true (and remove or stop relying on
shouldShowBanner/shouldShowList).


export default function App() {
const navigationRef = useRef();
const cleanupRef = useRef();
const navigationRef = useRef(null);
const cleanupRef = useRef(null);
const localListeners = useRef({ received: null, response: null });
const shownWelcomeRef = useRef(false);

useEffect(() => {
let timer;

const initializeNotifications = async () => {
console.log("[Push] initializeNotifications: start");
console.log("[Push] Platform:", Platform.OS);

if (Platform.OS !== "ios") {
console.log("[Push] (skipped) iOS ์ „์šฉ ๋กœ์ง. ํ˜„์žฌ:", Platform.OS);
return;
}

if (!Device.isDevice) {
console.log("[Push][WARN] ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋Š” ์›๊ฒฉ ํ‘ธ์‹œ ์ˆ˜์‹  ๋ถˆ๊ฐ€. ์‹ค๊ธฐ๊ธฐ ํ•„์š”.");
return;
}

const initializeNotifications = () => {
if (navigationRef.current) {
console.log('expo ํ‘ธ์‹œ์•Œ๋ฆผ ๋ฆฌ์Šค๋„ˆ ์ดˆ๊ธฐํ™”');
const cleanup = setupNotificationListeners(navigationRef.current);
cleanupRef.current = cleanup;

return cleanup;
// ===== ๊ถŒํ•œ ํ™•์ธ =====
try {
const existing = await Notifications.getPermissionsAsync();
console.log("[Push] permissions(existing):", existing?.status, existing);
if (existing.status !== "granted") {
const { status } = await Notifications.requestPermissionsAsync({
ios: { allowAlert: true, allowSound: true, allowBadge: true },
});
console.log("[Push] permission after request:", status);
if (status !== "granted") {
console.warn("[Push] permission denied; skip token");
return;
}
}
} catch (e) {
console.log("[Push][ERR] getPermissionsAsync failed:", e?.message || e);
return;
}

// ===== ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก =====
console.log("[Push] setupNotificationListeners() ํ˜ธ์ถœ");
const serviceCleanup = setupNotificationListeners?.();
cleanupRef.current = serviceCleanup;

try {
if (!localListeners.current.received) {
localListeners.current.received =
Notifications.addNotificationReceivedListener((n) => {
try {
console.log(
"[Push][recv] (fg) notification:",
JSON.stringify(n, null, 2)
);
} catch {
console.log("[Push][recv] (fg) notification received");
}
});
}
if (!localListeners.current.response) {
localListeners.current.response =
Notifications.addNotificationResponseReceivedListener((r) => {
try {
console.log("[Push][tap] response:", JSON.stringify(r, null, 2));
} catch {
console.log("[Push][tap] notification tapped");
}
});
}
} catch (e) {
console.log("[Push][ERR] add listeners failed:", e?.message || e);
}

// ===== ํ† ํฐ ๋ฐœ๊ธ‰ + ์„œ๋ฒ„ ์—…์„œํŠธ =====
try {
console.log("[Push] registerExpoPushToken() ํ˜ธ์ถœ");
const res = await registerExpoPushToken();
console.log("[Push] registerExpoPushToken() result:", res);

if (res?.success && res?.expoPushToken) {
console.log("โœ… [Push] ExpoPushToken:", res.expoPushToken);
} else {
console.warn("โŒ [Push] Expo ํ† ํฐ ๋ฐœ๊ธ‰ ์‹คํŒจ:", res?.error);
}
} catch (e) {
console.warn("[Push][ERR] registerExpoPushToken error:", e?.message || e);
}

// ===== ํ™˜์˜ ๋ฐฐ๋„ˆ =====
if (SHOW_WELCOME_ON_LAUNCH && !shownWelcomeRef.current) {
shownWelcomeRef.current = true;
try {
const now = new Date();
const time = new Intl.DateTimeFormat("ko-KR", {
hour: "2-digit",
minute: "2-digit",
}).format(now);
await Notifications.scheduleNotificationAsync({
content: {
title: "๐Ÿ‘‹ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!",
body: `${time} ์ ‘์†ํ–ˆ์Šต๋‹ˆ๋‹ค.`,
data: { _meta: "welcome" },
sound: "default",
},
trigger: null,
});
} catch (e) {
console.log("[Push][ERR] schedule welcome failed:", e?.message || e);
}
}

console.log("[Push] initializeNotifications: done");
};

const timer = setTimeout(initializeNotifications, 1000);
timer = setTimeout(initializeNotifications, 500);

return () => {
clearTimeout(timer);
if (cleanupRef.current) {
cleanupRef.current();
}
try {
cleanupRef.current?.();
} catch {}
try {
if (localListeners.current.received) {
Notifications.removeNotificationSubscription(localListeners.current.received);
localListeners.current.received = null;
}
if (localListeners.current.response) {
Notifications.removeNotificationSubscription(localListeners.current.response);
localListeners.current.response = null;
}
} catch {}
console.log("[Push] cleanup completed");
};
}, []);

return (
<NavigationContainer ref={navigationRef}>
<StackNavigator />
</NavigationContainer>
<ThemeProvider>
<NavigationContainer
ref={(r) => {
navigationRef.current = r;
if (r) console.log("[Nav] navigationRef ready");
}}
>
<StackNavigator />
</NavigationContainer>
</ThemeProvider>
);
}
15 changes: 0 additions & 15 deletions app.config.js

This file was deleted.

13 changes: 9 additions & 4 deletions app.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{
"expo": {
"name": "Doodook",
"name": "๋‘๋‘‘",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๐Ÿ› ๏ธ Refactor suggestion | ๐ŸŸ  Major

๐Ÿงฉ Analysis chain

์•ฑ ์ด๋ฆ„ ํ˜„์ง€ํ™” ํ™•์ธ

์•ฑ ์ด๋ฆ„์ด "Doodook"์—์„œ "๋‘๋‘‘"์œผ๋กœ ํ•œ๊ธ€๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. App Store ๋ฐ Play Store์—์„œ์˜ ํ‘œ์‹œ ์ด๋ฆ„์ด ์˜๋„๋Œ€๋กœ ๋ณ€๊ฒฝ๋˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.


๐Ÿ Script executed:

#!/bin/bash
# ์•ฑ ์ด๋ฆ„์ด ๋‹ค๋ฅธ ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ๋„ ์ผ๊ด€๋˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ํ™•์ธ
rg -n "Doodook" --type json --type js -g '!node_modules/**'

Length of output: 131


์•ฑ ์ด๋ฆ„ ์ผ๊ด€์„ฑ ์ˆ˜์ • ์š”์ฒญ
src/screens/Auth/SignUp1Screen.js 27ํ–‰ ๋“ฑ์—์„œ '๋‘๋‘‘(Doodook)'์„ '๋‘๋‘‘'์œผ๋กœ ๋ณ€๊ฒฝํ•˜์„ธ์š”. App Store/Play Store ํ‘œ์‹œ๋ช…๋„ ์˜๋„๋Œ€๋กœ ๋ฐ˜์˜๋˜๋Š”์ง€ ํ™•์ธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๐Ÿค– Prompt for AI Agents
In app.json around line 3 update the app name to exactly "๋‘๋‘‘" (remove the
English alias), then search and replace occurrences of '๋‘๋‘‘(Doodook)' in the
codebase (e.g., src/screens/Auth/SignUp1Screen.js line 27) to '๋‘๋‘‘' so the
display name is consistent; finally verify app store / Play Store displayName
settings (app.json or platform-specific config) reflect "๋‘๋‘‘" as intended and run
a build to confirm the visible name.

"slug": "doodook",
"owner": "yehyeon",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./src/assets/images/logo-d-app-icon-1500.png",
Expand All @@ -18,7 +19,7 @@
],
"ios": {
"bundleIdentifier": "com.lipeuoo.doodook",
"buildNumber": "7",
"buildNumber": "22",
"supportsTablet": true,
"infoPlist": {
"UIBackgroundModes": [
Expand Down Expand Up @@ -46,7 +47,11 @@
"color": "#F074BA"
}
]
]

],
"extra": {
"eas": {
"projectId": "57b0a621-af5d-4605-b6e0-cc46a6c474ec"
}
}
Comment on lines +51 to +55
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

โš ๏ธ Potential issue | ๐Ÿ”ด Critical

๐Ÿงฉ Analysis chain

EAS ํ”„๋กœ์ ํŠธ ID ์ถ”๊ฐ€ ํ™•์ธ

expo.extra.eas.projectId๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ ID๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ EAS ํ”„๋กœ์ ํŠธ์™€ ๋งคํ•‘๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ๊ด€๋ จ EAS ๊ตฌ์„ฑ(eas.json)์ด ์ด ํ”„๋กœ์ ํŠธ ID์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜์„ธ์š”.


๐Ÿ Script executed:

#!/bin/bash
# EAS ๊ตฌ์„ฑ ํŒŒ์ผ์ด ์กด์žฌํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ID๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ
if [ -f "eas.json" ]; then
  cat eas.json | jq -r '.cli.projectId'
else
  echo "eas.json ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"
fi

Length of output: 4


eas.json ํŒŒ์ผ ๋‚ด์— projectId ํ‚ค๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด ์ฃผ์„ธ์š”. ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๊ณต์œ ํ•ด ์ฃผ์„ธ์š”.


๐Ÿ Script executed:

#!/bin/bash
rg -n '"projectId"' -C2 eas.json || echo "projectId ํ‚ค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."

Length of output: 23


EAS ๊ตฌ์„ฑ ํŒŒ์ผ์— projectId ์ถ”๊ฐ€ ํ•„์š”

eas.json์— .cli.projectId๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. app.json์— ์ง€์ •๋œ ํ”„๋กœ์ ํŠธ ID(57b0a621-af5d-4605-b6e0-cc46a6c474ec)์™€ ๋™์ผํ•œ ๊ฐ’์„ eas.json์˜ .cli.projectId์— ์ถ”๊ฐ€ํ•˜์„ธ์š”.

๐Ÿค– Prompt for AI Agents
In app.json around lines 51 to 55 the EAS projectId is set to
57b0a621-af5d-4605-b6e0-cc46a6c474ec; add the same value to eas.json under the
.cli.projectId key (e.g. set ".cli": { "projectId":
"57b0a621-af5d-4605-b6e0-cc46a6c474ec" }) so eas.json and app.json use the
identical projectId.

}
}
Loading