ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 사이드이펙트를 해결하려면 네이티브 역량은 필요한듯

    댓글

Designed by Tistory.