블로그 이미지
안녕하세요~ iolate(a.k.a. isho) 의 블로그 입니다~! iolate

카테고리

분류 전체보기 (169)
Server, Cloud (7)
끄적끄적 (6)
Linux, Ubuntu (25)
개발개발 (45)
Mac, iOS (41)
Embedded (19)
NAS (1)
Web (5)
Network (3)
Review (10)
기타 (7)
비공개글 (0)
Total633,421
Today0
Yesterday164

Activator 를 꺼려하는 사람이 은근히 많아서,

Activator 가 필수적이지 않은 BeeKeyboard 에서는 의존성을 없애야 겠다,, 는 생각만 하고 놔두다가

어제 weak link 로 바꿨다..ㅎ


잠깐 확인해 봤는데 잘됨!


1. Makefiles 의 LDFLAGS 를 아래처럼 사용한다

@@@@_LDFLAGS = -weak_library /opt/theos/lib/libactivator.dylib


내가 못하는건지, 원래 안되는 건지 -weak_library 로 할때는 경로 전체를 적어줘야 하더라..


2. 앱 내에선 클래스의 존재 유무로 라이브러리가 로드 됐는지 확인한다.

다른 방법도 있는 것 같지만, 난 간단하게 저렇게 했음.

확인 안하고 냅두면 크래쉬 남 ㅇㅇㅋ


Class LAE = NSClassFromString(@"LAEvent");

if (LAE != nil) {


}


요런식으로...



설정 부분 같으면 불러오는 부분은 PSListController 를 사용하고,

Activator 를 사용하는 컨트롤러에서는 내부 변수로 Activator 의 클래스를 사용하고 있어서,

PSListController 에서 tableView:didSelectRowAtIndexPath: 를 오버라이드 해서 체크하고 있다.

다른 부분에서 비슷한걸 구현해 사용하고 있기 때문에 쉽게 끝냈음 ㅋ


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

    int group = [self indexOfGroup:indexPath.section];

    int pIndex = group + indexPath.row + 1;

    

    PSSpecifier* spec = [self specifierAtIndex:pIndex];

    if ([[spec propertyForKey:@"detail"] isEqualToString:@"GActivatorSettings"]) {

        Class LAE = NSClassFromString(@"LAEvent");

        if (LAE != nil) {

            [super tableView:tableView didSelectRowAtIndexPath:indexPath];

        }else{

            [tableView deselectRowAtIndexPath:indexPath animated:YES];

            NSString* message = LS(@"NEED_ACTIVATOR");

            UIAlertView* alert = [[UIAlertView alloc] initWithTitle:LS(@"BeeKeyboard") message:message delegate:self cancelButtonTitle:LS(@"OK") otherButtonTitles:nil];

            [alert show];

            [alert release];

            return;

        }

    }

    

    [super tableView:tableView didSelectRowAtIndexPath:indexPath];

}


단, 이 경우 PSListController 의 헤더에 tableView:didSelectRowAtIndexPath: 가 선언되어 있지 않기 때문에

선언해주고 써야 한다.


@interface PSListController (p)

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

@end



+ 확실하진 않은데, PSListController 에서 불러오는 plist 에서 index 0 의 항목이 PSGroupCell 이 아닐 경우 index 번호가 한개씩 밀릴 수도 있음... ㅎㅎ;;




여튼 이렇게 하면, Activator 와의 연계 부분을 사용하고 싶은 사람만 Activator 를 설치, 사용할 수 있게 된다!


다른 Dynamic Library 나 OS버젼 따라 다른 프레임워크 등도 이런식으로 사용하면 된다.

프레임워크의 경우엔 -weak_framework 임.

Posted by iolate

최근에 달린 댓글

최근에 받은 트랙백

글 보관함