Swift 라이브러리 프로퍼티 접근 문제 해결 - AcknowList

cheshire0105·2025년 1월 21일

iOS

목록 보기
32/45
post-thumbnail

Swift 라이브러리 프로퍼티 접근 문제 해결: AcknowList 사례 분석

문제 상황: 'acknowledgement is inaccessible' 에러

AcknowList 라이브러리를 사용 할 때, 폰트와 배경색을 변경 하려면 라이브러리 내부의 코드 접근 수준을 변경 해야 한다는 사실을 깨달았다.
AcknowList 라이브러리 적용 방법 - 이전 글

발생 조건

  • 외부 라이브러리(AcknowList)의 AcknowViewController 클래스 사용
  • acknowledgement 프로퍼티에 접근 시도
  • 에러 메시지:
    'acknowledgement' is inaccessible due to 'internal' protection level

원인 분석
라이브러리 구현 코드를 확인하면:

// 수정 전 원본 코드
open class AcknowViewController : UIViewController {
	var acknowledgement: AcknowList?
}
  1. acknowledgement 프로퍼티가 internal 접근 제어자로 선언됨
  2. 외부 모듈에서 해당 프로퍼티에 직접 접근 불가능
  3. 서브클래싱 시 상속받은 프로퍼티 사용 제한 발생

해결 방법: 라이브러리 코드 직접 수정

1단계 - 프로젝트에서 라이브러리 소스 파일 탐색

  1. Xcode 프로젝트 내 AcknowList 폴더 진입
  2. AcknowViewController.swift 파일 선택

2단계 - 접근 제어자 변경

수정 전:

open class AcknowViewController : UIViewController {
	var acknowledgement: AcknowList?
}

수정 후:

open class AcknowViewController : UIViewController {
    open var acknowledgement: Acknow?
}

3단계 - 변경 사항 확인

수정 요소내용
접근 수준internalopen
상속 가능성서브클래스에서 프로퍼티 오버라이드 가능
모듈 외부 접근다른 모듈에서 프로퍼티 직접 참조 가능

적용 결과

커스텀 뷰 컨트롤러 구현

class CustomAcknowViewController: AcknowViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 이제 정상 접근 가능
        print(acknowledgement.title) 
        
        // GitHub 저장소 주소 활용
        if let repoURL = acknowledgement.repository {
            fetchLicense(from: repoURL)
        }
    }
}

장점

  • 최소한의 코드 변경으로 문제 해결
  • 라이브러리 동작 방식을 크게 변형하지 않음
  • 추가적인 래퍼 클래스 생성 불필요

추가 고려 사항

라이브러리 업데이트 시 주의점

  • 패키지 관리자(CocoaPods/SPM) 통해 설치 시 수동으로 재적용 필요
  • pod update 또는 패키지 재설치 시 코드 변경 사항 초기화됨

결론

Swift에서 외부 라이브러리의 접근 제어 문제는 프로퍼티 접근 수준 조정으로 효율적으로 해결한다.
이 방식은 특히 오픈소스 라이브러리를 커스터마이징할 때 유용하게 적용할 수 있다.
단, 라이브러리 업데이트 시 변경 사항이 초기화될 수 있음을 항상 염두에 둔다.

참고

Change acknowledgement access level to open #128 - 나의 오픈 소스 수정 사항

0개의 댓글