2011-03-28 3 views
3

Mac OS X 용 Cocoa 응용 프로그램을 개발했습니다. 사용자 정의 플러그인 (인터페이스 포함)을 만들고 응용 프로그램에서 동적으로로드하려고합니다. 내 응용 프로그램은 폴더 내부를보고 모든 파일 (플러그인)을 검색하여 사용자 인터페이스에서 사용할 수 있도록해야합니다.Cocoa 응용 프로그램에서 동적으로 사용자 정의 플러그인 (라이브러리)로드

누군가 나에게 출발점을 제안 할 수 있습니까?

어떻게 동적으로로드 할 수 있습니까? 플러그인은 동적 라이브러리 또는 sth이어야합니까?

감사합니다.

답변

4

NSBundle을보고 싶습니다. 로드 가능한 번들 (프레임 워크는로드 가능한 번들입니다) 프로젝트는 원하는 것을 생성합니다. 번들의 principleClass 등록 정보를 플러그인의 최상위 클래스로 설정하면로드 된 번들에서 클래스의 인스턴스를 검색 할 수 있습니다. 주어진 경로에서 번들을로드 할 수 있습니다.

id bundle = [NSBundle bundleWithPath:pathToBundle]; 
NSError *err; 
if(![bundle loadAndReturnError:&err]) { 
    // err contains error info 
} else { 
    // bundle loaded properly 
    Class pluginClass = [bundle principleClass]; 
    // instantiate pluginClass and off you go... 
} 
+1

또한 번들의 Info.plist를보고 코드를로드하지 않고 플러그인 메뉴에 표시되도록 이름을 가져올 수있다. 그 이유는 loadAndReturnError :가 NSBundle 객체가 생성 될 때 자동으로 수행되지 않는 별도의 단계이기 때문이다. 필요에 따라 코드를 지연로드하는 것은 * 많은 * 플러그인이있는 경우 유용 할 수 있습니다. 일부 세션 만 특정 세션에 사용됩니다. –

+0

감사합니다. 매우 유용합니다. – Vassilis

+1

** [Plug-in Architectures] (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingCode/Concepts/Plugins.html) 전용 장이 있습니다. * Apple의 [코드로드 프로그래밍 주제] (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingCode/LoadingCode.html#//apple_ref/doc/uid/10000052-SW1) 가이드 – Jay

관련 문제