SwiftUI 에러 모음

개요

SwiftUI에서 개발을 하다보면 당연히 에러가 발생할 수 있다.

해결 방법을 알아보자




시뮬레이터는 되는데 핸드폰에서 빌드 오류




Communication with Apple failed. your maximum App ID limit has been reached.

No profiles for 'kyujin.FruitMart' were found: Xcode couldn't find any iOS App Development provisioning profiles matching 'kyujin.FruitMart'.

이 두개의 오류가 발생하며 시뮬레이터는 작동되지만 내 핸드폰에서 실행하면 안되는 경우가 있다.



해결방법


무료계정은 앱을 10개까지만 만들 수 있다. 최근에 개념 공부하느라 많이 만들었더니 안된다.

핸드폰에 빌드를 안하고 그냥 맥북에서만 했는데도 앱 한개로 치나보다.

  • xcode 설정에서 다른 애플계정 추가
  • 프로젝트 설정/Signing & Capabilities에서 Team을 새로운 애플계정으로 설정




environmentObject를 사용했을 때 프리뷰 오류




위 사진처럼 예기치 않은 오류라면서 종료될 때가 있다.



해결방법


만약 EnvironmentObject를 썼다면 프리뷰에도 환경객체 수식어를 붙여주면된다.

  • .environmentObject(환경객체)




Contextual type for closure argument list expects 1 argument, which cannot be implicitly ignored


GeometryReader안에서 Geometry 클로저의 매개변수를 안만들어주면 나는듯 또는 $0도 없거나



해결방법


  • 클로저 매개변수가 필요 없다면 _ in을 넣는다.
  • 클로저 매개변수가 필요하다면 arguement in을 넣는다
  • 클로저 매개변수를 생략하고 싶다면 $0을 사용한다.




.accentColor()사용 불가


메인문에 수식어로 네비게이션 바의 뒤로가기버튼을 바꿀수 있는데 없어졌음



해결방법


  • 클로저 매개변수가 필요 없다면 _ in을 넣는다.
  • 클로저 매개변수가 필요하다면 arguement in을 넣는다
  • 클로저 매개변수를 생략하고 싶다면 $0을 사용한다.




변수를 클로저로 구현했을 때 클로저 내용이 사용되지 않는다고 할 때


클로저로 변수를 선언할 때 에러는 아니고 경고가 뜬다.



해결방법


  • 해당 변수가 했으면 하는 작업에 return 키워드를 붙여야한다.




Cannot use instance member ‘viewModel’ within property initializer; property initializers run before ‘self’ is available


인스턴스가 만들어지기 전에 그 변수를 사용할 수 없다는 것이다.

c스타일로 코드를 짜면 당연히 돼야하는데 스위프트에서는 안된다.

1
2
3
//ERROR
let viewModel = ViewModel()
var ho = [viewModel.name, viewModel.age]



해결방법


  • static을 붙여서 타입프로퍼티로 만든다.
  • 클로저로 초기화한다.
1
2
static let viewModel = ViewModel()
var ho = [viewModel.name, viewModel.age]

OR

1
2
3
4
5
let viewModel = ViewModel()
var ho : [String] {
	return [viewModel.name, viewModel.age]
}




외부 sdk import했는데 안될 때


Firebase sdk를 설치 했는데 왜 안되지??

특정 라이브러리 import하면 쓸수 있는 기능도 안된다 그런다. Xcode 버그 같다.



해결방법


Workspace에 Package Dependency에 reset caches를 누르면 된다.