Programming/iOS2015.06.23 11:41

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'Could not load NIB in bundle: 'NSBundle  (loaded)' 
with name 'viewController' and directory 'Main.storyboardc''


Storyboard를 사용하고 있는데 지금까지 없던 위와 같은 오류가 발생했네요.

폰에서는 문제가 없는데 iPad2 7.1 시뮬레이터에서만 위와 같은 오류가 발생합니다. 

Storyboard를 수정한 것과 관련된 것 같은데 정확한 이유는 알 수 없지만.... 해결 방법은 간단합니다.


Storyboard가 빌드된 storyboardc가 없어지도록 캐시를 비우면 된다고 하는데.....

몰라.. 뭔가 복잡해..


더 간단한 방법은 Storyboard 이름을 리펙하시면 됩니다.

그럼 해결~

신고
Posted by 초프(초보 프로그래머)
Programming/iOS2015.02.11 15:35

다국어 지원을 위해 NSLocalizedString 을 하면 아이폰 디바이스의 언어 설정으로 문자열을 가져옵니다.

만약 앱 안에서 언어 설정을 변경하고 싶다면 어떻게 해야 할까??


검색을 해보면 가장 많이 나오는 방법은 아래와 같다.


[[NSUserDefaults standardUserDefaults] setObject:@[ @"ko" ] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];


NSLocalizedString이 AppleLanguages에 설정된 언어에서 가져오므로 잘 동작한다.

하지만 문제는 앱을 재 실행해야 한다는 것이다. 설정 하나 바꿨다고 앱을 재 실행하라고??


내가 찾은 방법은 다국어를 가져올때 특정 언어 Bundle에서 가져오도록 하는 것이다.


NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"Localizable" ofType:@"strings" inDirectory:nil forLocalization:@"ko"];
NSBundle *localizableBundle = [[NSBundle alloc] initWithPath:[bundlePath stringByDeletingLastPathComponent]];
NSLocalizedStringFromTableInBundle(key, nil, localizableBundle, nil);


위 코드에서는 디바이스 언어와 상관없이 모두 한국어로 다국로 문자열을 가져오게 하였습니다.

이 코드를 적용해도 바로 화면의 언어들이 변경되지는 않을 것 입니다.

추가 적으로 뷰를 새로 그려지게 하면 됩니다. 언어를 일일이 다시 설정하는 방법도 있겠지만..... 전 window.rootViewController를 새로 설정했습니다.


AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
appDelegate.window.rootViewController = viewController;


이제 설정할때마다 새로 화면을 불러와서 원하는 언어대로 표시합니다~!


신고
Posted by 초프(초보 프로그래머)
Programming/iOS2015.01.27 17:16

실행할 디바이스가 시뮬레이터인지 아닌지를 확인하는 매크로가 있다.

이걸 확인하는 방법은

#ifndef TARGET_IPHONE_SIMULATOR

#endif

가 아니다!!!!

#if !TARGET_IPHONE_SIMULATOR

#endif

이거다....

신고
Posted by 초프(초보 프로그래머)
TAG ios, Xcode
Programming/Android2014.09.27 02:50

빌드해서 aar을 생성했는데… 그냥 dependency에 넣어서는 추가가 안된다. 뭐지;;


일단 duplicate 오류가 나면 aar과 겹치는 리소스가 있어서 그렇다.

그래서 모듈 리소스명 앞에 prefix를 붙여서 해결함.


그후 빌드는 성공했는데 class를 찾을 수 없다!!!!!! 뭐지…

compile fileTree(dir: 'libs', include: ['*.jar','*.jar'])
compile files('libs/chope-1.0.0.aar')


이 방법 둘다 안 먹힌다.


해결 방법은 다음과 같다.

aar은 꼭 repository에서만 추가되어야 하나 보다. 그래서 일단 local repository를 추가해준다.

repositories {
    flatDir {
        dirs 'libs'
    }
}

그리고 dependency는 다음과 같이 추가 한다.

compile(name:'chope-1.0.0', ext:'aar')


이제 빌드하면 제대로 나온다!~~!!

aar에 관련된 부분을 전체적으로 보면 다음과 같다.

repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    compile(name:'chope-1.0.0', ext:'aar')
}


신고
Posted by 초프(초보 프로그래머)
Programming/Android2014.09.27 02:50

Android Module은 빌드되면 .aar (Android ARchive) 파일로 생성됩니다.

기본으로 build/outputs/aar 위치에 [module].aar 로 생성됩니다.

[module]-[version].aar 으로 변경하려면 아래와 같이 설정합시다!

android {
    .....

    buildTypes {
        release {
            project.archivesBaseName='chope'
            project.version=defaultConfig.versionName

            .....
        }
    }
}


신고
Posted by 초프(초보 프로그래머)