묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Flutter 중급 1편 - 클린 아키텍처
강의 화면이 안보여요
화면이 왜 안보일까요
-
미해결Flutter 초입문 왕초보편
비만계산기 강의에 대해서 질문
Error parsing LocalFile: 'C:\Users\DKSYSTEMS\StudioProjects\bmi_calculator\android\app\src\main\AndroidManifest.xml' Please ensure that the android manifest is a valid XML document and try again.처음 main_screen 만들고 main에서 빈화면이 나오도록 실행을 하면 이러한 에러가 콘솔에 나옵니다. 어떠한 문제일까요??
-
해결됨SwiftUI의 Property Wrapper(@State, @Binding...)
혹시 RxSwift 강의 계획도 있으신지 궁금합니다.
안녕하세요?혹시 RxSwift 강의도 향후 계획에 있으신지 궁금합니다.
-
미해결앨런 Swift Concurrency for Swift 6 (Part-1)
Task를 함수 내부에서 사용했을 때 값의 변화를 예상하는 법
📌 자주하는 질문 모음링크: https://pointed-earwig-996.notion.site/Swift-Concurrency-for-Swift-6-Part-1-22eecb0b83154ac28c7c66446f6e54e1?pvs=4 자주하는 질문을 먼저 확인 부탁드리며, 질문은 최대한 구체적으로하셔야 빠르게 답변드릴 수 있습니다. [질문 예시](1) 몇강, 몇초의 내용이 잘 이해가 안갑니다. (제가 적어놓은 강의 번호 "10강, 7분 강의 내용 중에... " )(2) 강의자료 몇페이지의 내용이 잘 이해가 안갑니다.(3) 정확하게 어떤 포인트에 대한 내용이 이해가 안갑니다. 다시 설명해주실 수 있나요? 안녕하세요 엘런님, 강의를 들으면서 swift concurrency를 적극 활용해보고 있는 중입니다.코드를 작성하고 나서 테스트 코드를 작성하면서 의문이 생기게 되었는데요,class viewmodel { @Published private(set) var count = 0 enum Event { case buttonTapped } // viewcontroller에서 호출하는 함수 func dispatch(_ event: Event) { Task { switch event { case .buttonTapped: count += await fetch() } } } // 네트워크를 통해 받아오는 값이라고 가정. private func fetch() async -> Int { return 100 } } struct viewmodelTests { var sut: viewmodel! init() { sut = viewmodel() } @Test func testButtonTapped0() async throws { sut.dispatch(.buttonTapped) try await Task.sleep(for: .seconds(1)) #expect(sut.count == 100) } @Test func testButtonTapped1() async throws { sut.dispatch(.buttonTapped) await Task.megaYield() #expect(sut.count == 100) } @Test func testButtonTapped2() async throws { sut.dispatch(.buttonTapped) try await Task.yield() #expect(sut.count == 100) } @Test func testButtonTapped3() async throws { try await withMainSerialExecutor { sut.dispatch(.buttonTapped) try await Task.yield() #expect(sut.count == 100) } } @Test func testButtonTapped4() async throws { try await withMainSerialExecutor { sut.dispatch(.buttonTapped) try await Task.megaYield() #expect(sut.count == 100) } } }다음과 같은 viewmodel을 테스트하는 코드를 작성했을 때,0번째 테스트의 경우는 현재 testButtonTapped0가 실행되는 Task를 suspend했지만, dispatch 함수 내부의 Task는 suspend되지 않고 그대로 진행되기 때문에 정상적으로 작동을 할 것으로 예상을 했습니다.https://github.com/pointfreeco/swift-concurrency-extras1번째의 경우는 위 라이브러리를 사용해서 하나의 Task를 여러번 yield시켜주도록 해서 동작하도록 해서 거의 높은 확률로 작동을 했습니다.그런데 testButtonTapped2의 경우 yield를 해주더라도 남아있는 스레드가 존재해서 바로 다시 일을 진행을 해서 틀릴 때가 있는 걸까요???또한 5번째는 거의 항상 맞는 것이 보장되는데 3번째는 보장이 되지 않는 이유도 궁금합니다. 궁극적으로 궁금한 점은 현재 위 코드의 viewmodel의 dispatch함수를 테스트하기 위해서 어떠한 방법을 사용해야 항상 성공을 보장할 수 있을 지 궁금합니다. 또한 Task.yield()를 했을 때 어떤 Task를 yield하는지 정확하게 이해가 가지 않습니다.. 긴 글 읽어주셔서 감사합니다!
-
미해결앱 개발 기초부터 실전까지 하나로 끝내는 Swift & iOS 마스터 클래스
Custom Activity Item 질문
안녕하세요 강사님.강의 잘 듣고 있습니다. 정말 도움이 많이 됩니다.저 처럼 늦은 나이에 시작하는 사람한테는 큰 힘이 됩니다.질문내용은 File Manage #11 - Custom Activity Item 강의를 수강하고, 실습을 하던중에 잘 되지않는 사항이 있어 질문 드립니다.이미지의 공유버튼을 누르면 작은 아이콘이 이미지파일명과 같이 뜨는데, 저는 작은 아이콘이 뜨지를 않습니다뭔가를 잘못한거 같은데요.. 바쁘시더라도 한번 봐주셔서 답변 부탁드립니다. 감사합니다.
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
playground에서 상단 실행?아이콘 회전 관련하여...
안녕하세요.. ios에서 네크워킹 169강의 강의영상의 코드를 playground에서 따라작성해서 테스트 했습니다. 궁금한 것이 있어서 질문드립니다. 우선 따라하기 결과는 정상적으로 json 데이터를 영화 openapi 로 잘 받아오는 결과는 확인했습니다. 그런데, playground 상단부분에 프로그램을 실행시키면, 실행중이라는 의미로 원모양의 아이콘이 돌아가는 것 같은데.. 이 아이콘이 계속 돌아가고 있어서 무엇인가 잘못된 것이 아닌지 궁금합니다. 아니면 제가 이 아이콘의 의미를 잘못해석한 것이 되는건가요? 강사님 영상에서는 이 아이콘이 보이지 않는데..제가 이 강의를 시작으로 xcode라는 툴을 처음으로 접해보고 있는 상태라서 모르는 것이 너무 많은 상태입니다.
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
활용앱53강에서 질문있습니다.
안녕하세요.. 활용앱53강을 보고있습니다.보통 xcode에서 프로젝트를 생성하면 일반적으로 ViewController 파일이 하나 존재하고, 그 파일이 일종의 앱실행을 담당하는 것으로 알고 있습니다. 그런데 53강에 프로젝트 화면을 보면, ViewController 파일은 없고, LoginViewController가 기존 다름 프로젝트의 ViewController 역할을 하는 것 같습니다.그래서 이 것을 어떻게 했는지 궁금합니다. 단순히 ViewController 를 이름 변경해서 LoginViewController로 하는 것은 아닌 것 같아서요..혹시 스토리보드 화면의 ViewController 화면을 선택한 후에 우측의 Identifier Inspector 화면에서 클래스 명칭을 추가로 입력한 ViewConroller 클래스로 변경하면 되는 건가요?
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
Project 명칭 변경방법이 궁금합니다.
안녕하세요..프로젝트를 설정할 때 명칭을 신경안쓰고, 그냥 타이핑해서 생성한 후에 최종까지 앱을 만든 후에 보니 프로젝트 명이 BMI 면 ㅠㅡㅑ 로 되어 있는 경우가 발생했습니다. 이경우 프로젝트 명을 간단히 영문으로 BMI로 변경할 수 있는 방법이 있을까요? 오른쪽에 있는 FileInspector 있는 Name을 변경했는데, 실행할 때 게속 오류가 나서, 현재는 해당 프로젝트를 다시 만들고 있는데, 쉽게 해결할 수 있는 방법이 없을까요?
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
override 에 대해서 궁금한 것이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요.. 최근 iOS 앱 개발 강의를 따라 하고 있는 중입니다. 그런데, 갑자기 의문이 생겼습니다. ViewController의 코드에서 override func viewDidLoad(){ super.viewDidLoad() //} 로 함수 내부에서 super.viewDidLoad()를 호출해 주는데, 세그웨이 를 위해서 override하는 함수 prepare에서는 왜 super.prepare()라는 함수를 호출해 주지 않는 것인가요? 함수를 override 할 때 super의 함수를 override 하는 것은 UI 표시 관련된 함수만 호출하는 건가요? 일종의 동작관련한 것들은 override 함수에서 super의 함수를 호출할 필요가 없나요?
-
미해결쉬운 모바일 테스트 자동화 시작하기 : Appium Studio
appium studio와 CI 도구와의 연동 문의 건
강사님 안녕하세요 저도 현재 QA 직무를 수행하고 있는데 자동화는 추후에 CI 도구와의 연동이 필요해 보입니다.Appium Studio는 젠킨스나 깃허브 액션 등등의 도구들과 연동이 가능한가요?? CI 도구와 연동 관련 참고할 만한 링크나 책등을 혹시 알고 계시는지 문의 드립니다. 추운 날씨에 건강 잘 챙기시기 바랍니다. 감사합니다.
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
table view 없음
show library 에 table view가 없는
-
해결됨Combine - iOS의 Reactive Programming(2025)
merge 오퍼레이터 질문
안녕하세요.stream은 시간이 지남에 따라 변하는 어떤 상태로 이해했는데요.publisher1과 publisher2에서의 stream을 각 stream1, stream2라고 했을때 시간이 지남에 따라 동시에 상태가 변하면 해당 상태는 merge 오퍼레이터에서 방출은 어떻게 처리하나요? [동시가 아닌 경우]-1-2-3---4--5--6---> 1-4-2-5-3-6 [동시인 경우]-1-2-3--4-5-6--> ?????
-
해결됨Combine - iOS의 Reactive Programming(2025)
zip 오퍼레이터 설명하는 부분에서 강의가 짤렸습니다.
안녕하세요. zip 오퍼레이터 설명하는 부분에서 강의가 짤려 있습니다.
-
미해결앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
섹션8] 코드 리팩토링 문의
섹션8 선생님의 코드 노션에서 개발시 참고할 수 있게 작성한코드 깃이 아닌 노션에 올려서 정리 자료로 써도 될까요. 노션 정리내용은 공개하여 취업할때 url공개하여 포트폴리오 자료에 붙여서 공개 될 수 있어서 문의드립니다.우선 많은 수정 가한 코드입니다.프로퍼티는 클로저, 메서드, 메서드에 설정 세가지 형식을 적용하고 objc 로 구현된 부분 순수 swift로 돌리는 부분 추가 코드 리팩토링 하였습니다.아래는 전체 수정한 코드입니다.노션에 올려도 될까요?여러 방식 찾아가며 다시 치는데 4시간 걸렸어요 ㅠㅠ아래와 같이 수정하였어요.
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
62강 Follow, Unfollow기능구현에서,,
7:15까지 코드 따라하고, 구동하는데;;아래와 같이 에러가 뜹니다... Thread 3: Simultaneous accesses to 0x600003d332b0, but modification requires exclusive access 구동조차 안되고 바로 아래와 같이 떠버려요;; 이건 어떻게 해결할가요???
-
해결됨Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
애구마선생님, 다음 프로젝트 강의는 언제 올려주세요???
선생님의 새로운 강의 듣고싶습니다,,이렇게, 자세한 강의는 처음입니다..명확하고 정확하고, 기초, 중급자는 물론이고1인개발에 관심있는 저에게는 거의 바이블입니다... 다른 강의도 듣고싶어요,,,너무 기대됩니다..
-
미해결Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
51강 10:22에서 이미지 여러장이 나오지 않아요;;
이런상황입니다 ㅠㅠ //// FeedView.swift// SUNGWON//// Created by SW KIM on 2/6/25.// import SwiftUI struct FeedView: View { @State var viewModel = FeedViewModel() var body: some View { // Text("FeedView") ScrollView { VStack{ HStack{ Image("instagramLogo2") .resizable() .scaledToFit() .frame(width: 110) Spacer() Image(systemName: "heart") .imageScale(.large) Image(systemName: "paperplane") .imageScale(.large) } .padding(.horizontal) ForEach(viewModel.posts) { post in let _ = print("post:", post) } Spacer() } } }} #Preview { FeedView()}
-
미해결Part2: 초중급 iOS 인스타그램 클론(SwiftUI, MVVM, Firebase, 2024)
52강 post데이터가 불러와지지 않아요,,,
52강 11:06에서 #Preview{FeedCellview(post: Post(id: 등등의 내용을 써야하는데;;Post정보가 나오지 않아 막혔어요;; 아래와 같이 뜨는데요;;;무엇이 잘못된걸까요;; WARNING: All log messages before absl::InitializeLog() is called are written to STDERRI0000 00:00:1738937824.318841 984217 config.cc:230] gRPC experiments enabled: call_status_override_on_cancellation, http2_stats_fix, monitoring_experiment, pick_first_new, trace_record_callops, work_serializer_clears_time_cachenw_endpoint_flow_failed_with_error [C1 2404:f340:10:1801::200a.443 failed parent-flow (unsatisfied (No network route))] already failing, returningnw_connection_get_connected_socket_block_invoke [C1] Client called nw_connection_get_connected_socket on unconnected nw_connectionTCP Conn 0x6000033015e0 Failed : error 0:50 [50]I0000 00:00:1738937824.540463 984238 subchannel.cc:806] subchannel 0x103f0dca0 {address=ipv6:%5B2404:f340:10:1801::200a%5D:443, args={grpc.client_channel_factory=0x60000002b7d0, grpc.default_authority=firestore.googleapis.com, grpc.http2_scheme=https, grpc.internal.channel_credentials=0x600002638de0, grpc.internal.client_channel_call_destination=0x1066f45e8, grpc.internal.event_engine=0x60000000dcd0, grpc.internal.security_connector=0x600002c38080, grpc.internal.subchannel_pool=0x6000029332c0, grpc.keepalive_time_ms=30000, grpc.primary_user_agent=grpc-c++/1.65.1, grpc.resource_quota=0x600000c9b2d0, grpc.server_uri=dns:///firestore.googleapis.com}}: connect failed (UNKNOWN:(domain:NSPOSIXErrorDomain, code:50, description:The operation couldn’t be completed. Network is down) {file:"/var/folders/hn/5bx1f4_d4ds5vhwhkxc7vdcr0000gn/T/ZipRelease/2024-07-25T04-01-28/project-ios/Pods/gRPC-Core/src/core/lib/transport/error_utils.cc", file_line:150, created_time:"2025-02-07T23:17:04.540048+09:00", grpc_status:2}), backing off for 965 mscurrentUser: Optional(SUNGWON.User(id: "XCwZST2c1fNVwhu9ex77JnK7ThS2", email: "test1@naver.com", username: "222222", name: "111111", bio: nil, profileImageUrl: nil))Optional(["username": 222222, "id": XCwZST2c1fNVwhu9ex77JnK7ThS2, "email": test1@naver.com, "name": 111111])DEBUG: Failed to load user posts with errorThe data couldn’t be read because it is missing.
-
해결됨Part1: 진짜 왕초보 iOS 배우기(SwiftUI, SwiftData, 2024)
List를 넣으니 위치가 제대로 조정이 되던데 그럼 Spacer는 따로 넣을 필요가 없는걸까요?
안녕하세요 선생님. wordRelay 강의 잘 수강하였습니다. 강의를 다 수강한 뒤에 복습하고자 수업 진행했던 코드를 처음부터 다시 따라 치던 와중에 끝말잇기 게임 타이틀과 단어 입력창, 확인 버튼 밑에 Spacer를 따로 넣지 않고 List만 넣어도 위치가 원하는대로 위로 올라가는데, 그럼 Spacer는 따로 넣어주지 않아도 되는건가요? Spacer를 넣는 것과는 어떤 차이가 있나요?import SwiftUI struct ContentView: View { let title: String = "끝말잇기 게임" @State var nextWord = "" @State var words: [String] = ["Apple", "Elsa", "Alin"] @State var showAlert: Bool = false var body: some View { VStack { Text(title) .padding(.horizontal, 12) .padding(.vertical, 16) .font(.title) .bold() .background( RoundedRectangle(cornerRadius: 15) .fill(.purple) .opacity(0.3) .shadow(radius: 5) ) .padding(.top, 10) } HStack { TextField("단어를 입력하세요", text: $nextWord) .padding() .background( RoundedRectangle(cornerRadius: 10) .stroke(lineWidth: 2) ) Button(action: { if words.last?.last?.lowercased() == nextWord.first?.lowercased() { words.append(nextWord) nextWord = "" } else { showAlert = true nextWord = "" } }, label: { Text("확인") .foregroundStyle(Color.white) .padding() .background( RoundedRectangle(cornerRadius: 10) ) }) .alert("끝말이 이어지는 단어를 입력하세요", isPresented: $showAlert) { Button("확인", role: .cancel) { showAlert = false } } } .padding(.horizontal) .padding(.top) List { ForEach(words.reversed(), id: \.self) { word in Text(word) .font(.title) } } .listStyle(.plain) // 선생님은 여기에 Spacer()를 넣으셨는데 // 입력하지 않아도 타이틀과 단어 입력창의 위치가 // 위로 올라갑니다 } } #Preview { ContentView() }
-
미해결[Lv.2] SwiftUI 중급 - Core Data와 SwiftData로 앱 완성하기
CoreData Array의 변화에 따른 SwiftUI View 변화 적용(with @Observable Macro)
지난번과 동일하게 자꾸, @Observation을 활용하려다보니 문제가 많이 생기는 것 같습니다.정확하게 차이를 이해하려고 강의를 돌려봐도 제가 이해하고 있는 바와 다른 점들이 있는 것 같아 질문 드립니다. 강의의 내용은 CoreData를 다룰 때, fetch로 불러온 것을 View로 넘기기위한 변수 var savedEntities: [Fish] 를 만들고, :ObservableObject protocol을 활용하셨습니다. 이후 View에서 ViewModel을 처음 초기화할 때 사용하기 위해서 @Stateobject를 활용하여 설명을 하셨고요. 그렇다면, Observable Macro로 Migrating하기 진행하는데에도 문제가 없다고 생각을 했습니다.그래서, 아래와 같이 코드를 바꾸어 보았습니다. 그런데 문제는 Viewmodel에서 정의된 updateFish() method 가 적용되지 않습니다.List에서 주어진 생선 이름을 tap했을 경우, "~" 가 추가가 되어야 하는데,func updateFish(fish: Fish){ let currentName = fish.name ?? "" let newName = currentName + "~" fish.name = newName saveData() print("Updating fish name to: \(newName)") }와 같이 print를 찍어보았을 때, 디버그 창에서는 print가 되지만,View에서는 "~"가 추가되지 않는 모습을 확인할 수 있었습니다.CoreData의 변화를 감지하지 못하는건지.. 기초강의에서 FruitModel 예시에서는 ObservableObject대신 Observable Macro를 적용해도 되었었거든요.여기서도 fruitArray이라는 배열을 사용했는데 잘 적용되었습니다.@Observable Macro를 적용하는데에 있어서 제가 잘못 이해하고 있는 부분이 있을까요?var fruitArray: [FruitModel] 는 View에서 변화를 감지하여 실시간 Update가 가능한 반면var savedEntities: [Fish] 는 왜 변경되어도 View에서 변화를 감지 하지 못하는지 궁금합니다. 감사합니다.