-
XCode16에서 앱 종료 이슈 - 객체 중복 init카테고리 없음 2024. 12. 17. 17:03
xcode16으로 빌드/배포 & ios18 에서만 발생하는 특이한 문제..
기존에도 이슈가 될법한 내용인데, xcode15로 빌드/배포하면 정상이고 xcode16에서만 이슈가 된다
+ iOS 18이하는 정상, 18부터 이슈
[ awakeFromNib / initWithFrame ]
1. IKTableView - (id)initWithFrame:(CGRect)frame { if( ( self = [super initWithFrame:frame] ) ) { ~~~~~~~~ } 2. CalendarView.m - (void)awakeFromNib { [super awakeFromNib]; [self setup]; } - (void)setup { [self.mIKTableView initWithFrame:self.mIKTableView.frame]; self.mIKTableView.tag = _TAG_TABLEVIEW; self.mIKTableView.backgroundColor = [HWColor backgroundBasic];; }
1. awakeFromNib
- awakeFromNib는 Nib 파일 또는 Storyboard를 통해 초기화된 객체가 이미 메모리에 로드된 후 호출됩니다.
- 따라서 self.mIKTableView는 이미 초기화된 상태입니다.
>> 해당 함수에서는 보통 객체의 커스텀 설정(backgroudColor 등) 지정
2. IKTbleView의 initWithFrame: 메서드:
- IKTbleView 객체가 이미 생성되어 있는 상태인데, CalendarView의 setup 메서드에서 다시 initWithFrame:을 호출하고 있습니다.
- self.mIKTableView는 이미 Nib 또는 Storyboard에서 초기화되었으므로 다시 초기화할 필요가 없습니다.
즉, awakeFromNib호출 시점에 이미 Nib파일을 통해 mIKTableView가 초기화 되어있는데, 다시 initWithFrame:으로 초기화하려고 시도하기 때문에 충돌이 발생.
>> tableView는 nib에서 이미 생성,초기화 되었으므로, init함수를 삭제하면 됨
왜 xcode16에서만 문제가 되냐는 질문에 gpt는
UIView초기화 과정 혹은 생명주기 관리에 엄격한 검사나 수정이 이루어졌을 수 있다고만 함..
따라서 사전에 방지하기는 힘들고, 결국 xcode를 업데이트 하거나 새로운os가 출시되었을때 전수테스트를 해볼수밖에 없다.
버전을 올릴때마다 늘 이슈가 되었는데... 증권에서는 장애에 너무 민감하고 당장 수정하라 재촉하니 이럴때마다 참 난감하다.
하이브리드 개발로 전향해도 결국 이런 os나 xcode 사이드이펙트를 해결하려면 네이티브 역량은 필요한듯