묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
setState()를 호출하지 않으면 build가 실행 안되는 건가요?
안녕하세요. setState()를 실행하면, build()함수가 실행되는 것을 배웠는데요. build()가 처음 실행된 이후로, setState()를 명시적으로 호출하지 않는다면, build()함수가 실행되는 경우는 없는 것인가요? 즉, setState()를 개발자가 명시적으로 넣어주지 않았다면, 화면 갱신이 절대 발생 안되는 것인지가 궁금했습니다. 나중에 강의를 더 나가면 저절로 알게될지도 모르겠지만, 궁금해서 문의드립니다. 감사합니다.
-
미해결Flutter 앱 개발 기초
user-not-found, wrong-password 코드가 더 이상 반환되지 않습니다
2023년 9월 15일 이후 프로젝트에서는 Email Enumeration Protection이 기본 활성화되어 user-not-found, wrong-password 코드가 더 이상 반환되지 않습니다 -> INVALID_LOGIN_CREDENTIALS 코드로 통합 try { await FirebaseAuth.instance.signInWithEmailAndPassword( email: email, password: password, ); onSuccess(); notifyListeners(); } on FirebaseAuthException catch (e) { if (e.code == 'INVALID_LOGIN_CREDENTIALS' || e.code.contains('invalid-credential') || e.code == 'wrong-password' || e.code == 'user-not-found') { onError('이메일 또는 비밀번호를 확인해주세요.'); } else if (e.code == 'invalid-email') { onError('이메일 형식을 확인해주세요.'); } else { onError(e.message!); } } catch (e) { onError('서버 오류가 발생하였습니다 $e.toString()'); }
-
해결됨Flutter 앱 개발 기초
SharedPreferences prefs 초기화 시기 문제
제 식대로 코드를 수정했습니다. MultiProvider로 CatService(prefs)를 호출하는 시기와 prefs를 초기화하는 시기가 비슷하여, 문제가 생겼습니다. "CatService 내부에서 async로 초기화하게 만들고생성자에서 바로 prefs를 쓰지 않도록 수정"하는 방식을 추천하는데 그게 맞을까요? 에러 메세지는 다음과 같습니다 [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel: "dev.flutter.pigeon.shared_preferences_android.SharedPreferencesApi.getAll"., null, null) 주요 코드import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); SharedPreferences prefs = await SharedPreferences.getInstance(); runApp( MultiProvider( providers: [ ChangeNotifierProvider(create: (context) => CatService(prefs)), ], child: const MyApp(), ), ); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: HomePage(), theme: ThemeData(textTheme: GoogleFonts.getTextTheme('Sunflower')), ); } } class CatService extends ChangeNotifier { SharedPreferences prefs; List<String> catImages = []; List<String> favoriteImages = []; CatService(this.prefs) { getRandomCatImages(); favoriteImages = prefs.getStringList("favorites") ?? []; } void getRandomCatImages() async { Response result = await Dio().get( 'https://api.thecatapi.com/v1/images/search?limit=10&mime_types=jpg', ); for (var i = 0; i < result.data.length; i++) { catImages.add(result.data[i]["url"]); } notifyListeners(); } void toggleFavoriteImages(String image) { if (favoriteImages.contains(image)) { favoriteImages.remove(image); } else { favoriteImages.add(image); } prefs.setStringList("favorites", favoriteImages); notifyListeners(); } } <전체 코드>import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); SharedPreferences prefs = await SharedPreferences.getInstance(); runApp( MultiProvider( providers: [ ChangeNotifierProvider(create: (context) => CatService(prefs)), ], child: const MyApp(), ), ); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: HomePage(), theme: ThemeData(textTheme: GoogleFonts.getTextTheme('Sunflower')), ); } } class CatService extends ChangeNotifier { SharedPreferences prefs; List<String> catImages = []; List<String> favoriteImages = []; CatService(this.prefs) { getRandomCatImages(); favoriteImages = prefs.getStringList("favorites") ?? []; } void getRandomCatImages() async { Response result = await Dio().get( 'https://api.thecatapi.com/v1/images/search?limit=10&mime_types=jpg', ); for (var i = 0; i < result.data.length; i++) { catImages.add(result.data[i]["url"]); } notifyListeners(); } void toggleFavoriteImages(String image) { if (favoriteImages.contains(image)) { favoriteImages.remove(image); } else { favoriteImages.add(image); } prefs.setStringList("favorites", favoriteImages); notifyListeners(); } } class HomePage extends StatefulWidget { const HomePage({super.key}); @override State<HomePage> createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { @override Widget build(BuildContext context) { return Consumer<CatService>( builder: (context, catService, child) { return Scaffold( appBar: AppBar( backgroundColor: Colors.yellow, title: Center(child: Text("랜덤 고양이")), actions: [ IconButton( onPressed: () { Navigator.push( context, MaterialPageRoute(builder: (context) => FavoritePage()), ); }, icon: Icon(Icons.favorite, color: Colors.red), ), ], ), body: SafeArea( child: Container( color: Colors.brown.shade100, child: GridView.count( crossAxisCount: 2, mainAxisSpacing: 8, crossAxisSpacing: 8, padding: EdgeInsets.all(8), children: List.generate(catService.catImages.length, (index) { String catImage = catService.catImages[index]; return Stack( children: [ Positioned.fill( child: GestureDetector( onTap: () { catService.toggleFavoriteImages(catImage); }, child: Image.network(catImage, fit: BoxFit.cover), ), ), Positioned( right: 0, bottom: 0, child: Icon( Icons.favorite, size: 40, color: catService.favoriteImages.contains(catImage) ? Colors.pink.shade200 : Colors.transparent, ), ), ], ); }), ), ), ), ); }, ); } } class FavoritePage extends StatelessWidget { const FavoritePage({super.key}); @override Widget build(BuildContext context) { return Consumer<CatService>( builder: (context, catService, child) { return Scaffold( appBar: AppBar( backgroundColor: Colors.yellow, title: Center(child: Text("좋아")), ), body: SafeArea( child: GridView.count( crossAxisCount: 2, mainAxisSpacing: 8, crossAxisSpacing: 8, padding: EdgeInsets.all(8), children: List.generate(catService.favoriteImages.length, ( index, ) { String catImage = catService.favoriteImages[index]; return Stack( children: [ Positioned.fill( child: GestureDetector( onTap: () { catService.toggleFavoriteImages(catImage); }, child: Image.network(catImage, fit: BoxFit.cover), ), ), Positioned( right: 0, bottom: 0, child: Icon( Icons.favorite, size: 40, color: catService.favoriteImages.contains(catImage) ? Colors.pink.shade200 : Colors.transparent, ), ), ], ); }), ), ), ); }, ); } }
-
미해결비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE
download as zip 윈도우에서 어디있나요?
2-3강 듣는 중에 교재 위치 2-39) 이거 저만 안보이는 것일까요? 흑흑,, 윈도우 사용중인데 이게 어디있는지 모르겠습니다. 지피티한테 물어봐도 모르겠어서 질문드려요 현재 수강 진도를 함께 알려주세요! "1주차 3강까지 완료" 또는 "2주차 실습 중"처럼 어디까지 들으셨는지 적어주시면 맞춤형 답변을 드릴 수 있어요 📚구체적인 상황과 함께 질문해주세요! "AI가 안 된다"보다는 "Cursor에서 이런 프롬프트를 입력했는데 이런 에러가 나와요"처럼 상세하게 적어주시면 더 정확한 답변을 드릴 수 있어요 🎯스크린샷이나 코드를 첨부해주세요. 에러 화면, 현재 진행 상황을 보여주시면 문제 해결이 10배 빨라집니다! 마크다운 코드 블록(```)을 활용하면 더 깔끔하게 정리할 수 있어요 📸커뮤니티 검색을 먼저 해보세요. 같은 문제로 고민하신 분들이 이미 해결책을 찾았을 수도 있어요. 검색 후 못 찾으시면 언제든 새로 질문해주세요! 🔍서로 도우며 함께 성장해요. 나도 모르는 건 "저도 궁금해요!"라고 댓글 달아주시고, 아는 건 적극적으로 공유해주세요. 가르치면서 더 잘하게 됩니다 💪바이브코딩 관련 질문은 환영, 기술 세부사항은 GPT 활용! 프롬프트 작성법, AI 도구 사용법은 여기서, 복잡한 코딩 문법은 ChatGPT에게 물어보시는 게 더 빨라요 🤖진도나 과제 관련 문의는 1:1 문의를 이용해주세요. 개인적인 학습 계획, 환불, 수강 기간 연장 등은 따로 문의해주시면 더 자세히 상담드릴게요 📞실패 사례도 공유해주세요! "이렇게 했더니 망했어요" 같은 경험담도 다른 수강생들에게 큰 도움이 됩니다. 실패도 소중한 학습 자료예요 💡💬 좋은 질문 예시[진도] 2주차 5강 - React 컴포넌트 생성까지 완료[질문] Cursor에서 버튼 컴포넌트 생성 시 에러 발생상황: 2주차 실습 중 버튼 컴포넌트를 만들려고 하는데프롬프트: "빨간색 버튼 컴포넌트 만들어줘"에러 메시지: [스크린샷 첨부]시도해본 것: GPT에게도 물어봤는데 같은 에러 발생어떻게 해결하면 될까요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
video_call 플러그인 설치시 에러문제
위처럼 플러그인 설치후에 에러가 발생합니다. 도움부탁드립니다.
-
해결됨Flutter 앱 개발 기초
index로 삭제하게 되면, index가 고정되어 있으니 문제가 발생하지 않나요?
bucketlist의 index와 삭제할 index가 다르게 되는 상황이 발생하지 않나요? 제가 직접 설명하긴 어려워서 ai 답변 올립니다index 캡처 문제가 있습니다 // 1. IconButton 클릭 → showDeleteDialog(context, index) 호출 onPressed: () { showDeleteDialog(context, index); }, // index=1 (예시) // 2. Dialog에서 onPressed 호출 시 TextButton( onPressed: () { setState(() { bucketList.removeAt(index); // ❌ index=1 고정 (Dialog 동안 리스트 변경됨) }); }, )Dialog가 열리는 동안 다른 항목 삭제 → index 무효화 → 잘못된 항목 삭제
-
해결됨Flutter 앱 개발 실전
다트 프로젝트
이렇게 뜨는데 왜 lib이 없을까요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
children 안의 if 문에서 { } 못쓰는 이유?
child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ if(show) GestureDetector( onTap: () { setState(() { color = color == Colors.blue ? Colors.red : Colors.blue; }); }, child: CodeFactoryWidget( color: color ), ), SizedBox(height: 32.0,), ElevatedButton( onPressed: () { //print('Clikced!'); setState(() { show = show == true ? false : true; }); }, child: Text('클릭해서 보이기/ 안보이기')) ], 이렇게 인데, if(show) 의 코드를 좀더 편하게 보기 위해 GestureDectector() 를 { } 로 묶어주려고하니까 오류가 뜨네요. 왜그런가요?if() {} 이렇게 할 수 있지 않나요?그리고 if() {} 안에 print() 넣으려고 하니 print 도 에러가 뜨네여child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ if(show) { // if문 {} 로 묶어줌 GestureDetector( onTap: () { setState(() { color = color == Colors.blue ? Colors.red : Colors.blue; }); }, child: CodeFactoryWidget( color: color ), ), } else print("Error"); // print 도 에러 뜸 SizedBox(height: 32.0,), ElevatedButton( onPressed: () { //print('Clikced!'); setState(() { show = show == true ? false : true; }); }, child: Text('클릭해서 보이기/ 안보이기')) ], ),코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨Flutter 앱 개발 기초
API 사이트가 안되네요
[링크] Numbers Quiz API URL 여기 눌러도 그냥 아무것도 안떠요
-
해결됨Flutter 앱 개발 기초
잘 되다가 sharedPreferences부터 에러
exception: warning: classpath entry points to a non-existent location: C:\Users\uAE40uC740uC9C4\.gradle\caches\modules-2\files-2.1\org.jetbrains\annotations\23.0.0\8cc20c07506ec18e0834947b84a864bfc094484e\annotations-23.0.0.jarexception: warning: classpath entry points to a non-existent location: C:\Users\uAE40uC740uC9C4\.gradle\caches\8.14\transforms\66a55c9302b8dacfca4a88d55f2bb41c\transformed\startup-runtime-1.1.1-api.jarexception: warning: classpath entry points to a non-existent location: C:\Users\uAE40uC740uC9C4\.gradle\caches\8.14\transforms\0323f414d3b6f829989b737577ddbcb8\transformed\tracing-1.2.0-api.jarexception: warning: classpath entry points to a non-existent location: C:\Users\uAE40uC740uC9C4\.gradle\caches\8.14\transforms\b5ea8c96fd0431c40235788c8b3be10a\transformed\relinker-1.4.5-api.jarexception: error: source file or directory not found: C:\Users\uAE40uC740uC9C4\AppData\Local\Pub\Cache\hosted\pub.dev\shared_preferences_android-2.4.18\android\src\main\kotlin\io\flutter\plugins\sharedpreferences\MessagesAsync.g.ktexception: error: source file or directory not found: C:\Users\uAE40uC740uC9C4\AppData\Local\Pub\Cache\hosted\pub.dev\shared_preferences_android-2.4.18\android\src\main\kotlin\io\flutter\plugins\sharedpreferences\SharedPreferencesPlugin.ktexception: error: source file or directory not found: C:\Users\uAE40uC740uC9C4\AppData\Local\Pub\Cache\hosted\pub.dev\shared_preferences_android-2.4.18\android\src\main\kotlin\io\flutter\plugins\sharedpreferences\StringListObjectInputStream.ktFAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':shared_preferences_android:compileDebugKotlin'.> A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction > Compilation error. See log for more details* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.> Get more help at https://help.gradle.org. --- 위처럼 에러나고, 재실행하려고 하니까 아예 앱이 안켜집니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
이렇게 오류가 떠요
E/flutter ( 5343): [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: 'package:webview_flutter_platform_interface/src/platform_webview_controller.dart': Failed assertion: line 26 pos 7: 'WebViewPlatform.instance != null': A platform implementation for webview_flutter has not been set. Please ensure that an implementation of WebViewPlatform has been set to WebViewPlatform.instance before use. For unit testing, WebViewPlatform.instance can be set with your own test implementation. 코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
AppBar 사용했는데
AppBar 사용했는데, 예시처럼 파란색 바탕에 흰색 글씨가 아니라, 그냥 똑같이 흰색 배경에 검정색 글씨가 나와요 코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE
저 플러터 앱 만들준비 된건가요?
저는 지금 진도 4-1입니다 이렇게 나와요. visual studio에 !표시 있습니다.추가로 준비해야 하나요? 강사님의 macOS와 다른 windows를 쓰고 있어서 다르게 나오는지 모르겠습니다 현재 수강 진도를 함께 알려주세요! "1주차 3강까지 완료" 또는 "2주차 실습 중"처럼 어디까지 들으셨는지 적어주시면 맞춤형 답변을 드릴 수 있어요 📚구체적인 상황과 함께 질문해주세요! "AI가 안 된다"보다는 "Cursor에서 이런 프롬프트를 입력했는데 이런 에러가 나와요"처럼 상세하게 적어주시면 더 정확한 답변을 드릴 수 있어요 🎯스크린샷이나 코드를 첨부해주세요. 에러 화면, 현재 진행 상황을 보여주시면 문제 해결이 10배 빨라집니다! 마크다운 코드 블록(```)을 활용하면 더 깔끔하게 정리할 수 있어요 📸커뮤니티 검색을 먼저 해보세요. 같은 문제로 고민하신 분들이 이미 해결책을 찾았을 수도 있어요. 검색 후 못 찾으시면 언제든 새로 질문해주세요! 🔍서로 도우며 함께 성장해요. 나도 모르는 건 "저도 궁금해요!"라고 댓글 달아주시고, 아는 건 적극적으로 공유해주세요. 가르치면서 더 잘하게 됩니다 💪바이브코딩 관련 질문은 환영, 기술 세부사항은 GPT 활용! 프롬프트 작성법, AI 도구 사용법은 여기서, 복잡한 코딩 문법은 ChatGPT에게 물어보시는 게 더 빨라요 🤖진도나 과제 관련 문의는 1:1 문의를 이용해주세요. 개인적인 학습 계획, 환불, 수강 기간 연장 등은 따로 문의해주시면 더 자세히 상담드릴게요 📞실패 사례도 공유해주세요! "이렇게 했더니 망했어요" 같은 경험담도 다른 수강생들에게 큰 도움이 됩니다. 실패도 소중한 학습 자료예요 💡💬 좋은 질문 예시[진도] 2주차 5강 - React 컴포넌트 생성까지 완료[질문] Cursor에서 버튼 컴포넌트 생성 시 에러 발생상황: 2주차 실습 중 버튼 컴포넌트를 만들려고 하는데프롬프트: "빨간색 버튼 컴포넌트 만들어줘"에러 메시지: [스크린샷 첨부]시도해본 것: GPT에게도 물어봤는데 같은 에러 발생어떻게 해결하면 될까요?
-
해결됨Flutter 앱 개발 기초
기존의 프로젝트
에뮬레이터 켜면 기존의 프로젝트가 뜨는데이거 어떻게 새걸로 나오게 할 수 있을까요
-
해결됨Flutter 앱 개발 기초
I/O라는 창이 윈도우에서는 없어요
어디가야 I/O 이거로 키보드 보이게 할 수 있을까요? 10:18 부분입니다
-
해결됨Flutter 초입문 왕초보편
실로폰 음원 재생 오류 해결 (do.1.wav)
안녕하세요. 강의 듣다가 테스트 중에 문제가 발생하여 해당 내용에 대해 공유를 드리고자 이렇게 글 남깁니다.문제가 발생한 부분은 음원을 audioPlayer 객체로 읽어 들이는 과정에서 제대로 처리가 되지 않아 _isLoading State 값이 변경되지 않고 무한 로딩이 걸리는 문제가 있습니다.원인을 찾고자 try ~ catch 문을 통해 에러 메세지를 출력해 보았다가 _isLoading State가 정상적으로 업데이트 되어 화면 UI가 나오기 시작했습니다.for (final note in notes) { final player = AudioPlayer(); try { await player.setAsset('assets/$note'); } catch (e) { print(e); } _audioPlayers.add(player); }다만 이렇게 수정한 후에는 맨 첫 번째 '도' 건반의 소리가 나지 않았습니다. 다른 음원은 모두 정상적으로 로드했지만, 첫 번째 'do1.wav' 만 로드가 되지 않고 에러가 발생합니다.Playback error androidx.media3.exoplayer.ExcoPlaybackException: Source Error여러 고민을 해 보다가 혹시나 싶어 'do1.wav'의 음원의 이름을 'do.wav'로 바꾸니 정상적으로 작동하였습니다.정확한 원인은 모르겠지만, 혹시 같은 문제를 겪는 분은 이름을 바꿔보는 걸 시도해 보시면 좋을 거 같습니다!
-
미해결비전공자 혼자서 하루 만에 수익화 앱 출시하기
시뮬레이터가 안보여요
0:25초에서 윈도우에서는 설정을 어떻게해야하나요시뮬레이터가 안보여요
-
해결됨비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE
Replit 문의
Replit에서 강의대로 명령어 했는데 명령어 두번만에 agent usuage 사용되었다고 하네요 다른 계정으로 똑같이 시도 했는데 agent usuage 몇번 시도하니깐 바로 또 업그레이드 하라고 하던데 업데이트 되면서 달라진거 같습니다
-
해결됨비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE
Lovable cloud
안녕하세요supabase가 없어 찾아보니 lovable cloud가 자체로 생겼더군요이 관련 강의는 추후에 업데이트 해주시는건가요?
-
미해결Flutter 초입문 왕초보편
Emulate Device Frame 관련 질문입니다.
안녕하세요. 앱 개발에도 관심이 생겨 Flutter에 도전을 하고 있습니다. 초입문편이 있길래 구매하여 강의 시청 중에 있는데요. 강의에서 보여지는 Android Studio 버전이 저와 달라서 일단 헷갈리는 부분이 있습니다. 현재 다운로드하는 시점에서는 Android Studio Otter로 되어 있는데, 현재 보여주시는 UI와 상당히 달라져 있어서 약간 진행하는데 텀이 발생하고 있습니다. 제가 설치한 Android Studio Otter에서는 Device Manager > device > Edit 을 클릭하여 들어가 보아도 Device Frame 관련 체크박스가 보이지 않습니다. Otter에서는 따로 지원하지 않는 것인가요?참고로 밖으로 꺼내지 않고 사이드바에 있을 경우엔 따로 Device Frame을 제거할 수 있더라구요 .. 밖으로 빼냈을 경우에만 Device Frame 체크박스를 찾을 수 없는 상황입니다 ..!