336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



안녕하세요. 오랜만에 글을 남깁니다.

연말인데 올해 계획을 잘 마무리 짓고 계신가요? 


오늘은 iOS의 퍼미션 종류를 알아보겠습니다. iOS10부터는 퍼미션 항목을 빼먹으면 검사 후 아예 아이튠즈에 안 올라가고, 바로 추가해 달라고 등록된 메일이 옵니다.

앱을 만들다보면 퍼미션을 까먹고 사진을 불러온다던가 위치를 알아올때 왜 안 가져오지 하면서 구글 검색을 하기 마련입니다. (아닌가요..?ㅎㅎ) 

퍼미션 종류와 info.plist에 들어가는 이름입니다.


  • (블루투스)Bluetooth Sharing – NSBluetoothPeripheralUsageDescription 
  • (달력)Calendar – NSCalendarsUsageDescription
  • (전화 관련)CallKit – NSVoIPUsageDescription
  • (카메라)Camera – NSCameraUsageDescription
  • (연락처)Contacts – NSContactsUsageDescription
  • (건강)Health – NSHealthShareUsageDescription & NSHealthUpdateUsageDescription
  • (홈킷)HomeKit – NSHomeKitUsageDescription
  • (위치)Location – NSLocationUsageDescription, NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescription
  • (미디어 라이브러리)Media Library – NSAppleMusicUsageDescription
  • (마이크)Microphone – NSMicrophoneUsageDescription
  • (모션)Motion – NSMotionUsageDescription
  • (사진, 앨범)Photos – NSPhotoLibraryUsageDescription
  • (미리알림)Reminders – NSRemindersUsageDescription
  • (음성 인식)Speech Recognition – NSSpeechRecognitionUsageDescription
  • (시리킷)SiriKit – NSSiriUsageDescription
  • (TV 프로 바이더)TV Provider – NSVideoSubscriberAccountUsageDescription


까먹지 말고 추가해주시면 될거 같습니다.

마지막까지 계획하신거 잘 마무리 하시고 2017년을 맞이하는 개발자가 되었으면 합니다.!



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



안녕하세요. 

저는 iOS 개발을 하다보니깐 XCode를 가지고 개발을 합니다. 

회사 프로젝트라던지, 개인 프로젝트라던지 가끔 엉뚱하게도 "내가 짠 코드는 과연 몇줄일까??" 라는 생각을 하게됩니다.. ㅎㅎ (저만 그런건가요,,)


일단 터미널을 열고 라인 수를 보고자하는 프로젝트 폴더로 cd 명령어를 쳐서 들어갑니다.

cd를 치시고 한칸 뛴다음 폴더를 끌어 넣고 엔터를 치면 폴더 디렉토리로 이동하게 됩니다. (저는 잘 몰라서 일일히 찾아서 들어갔습니다.)


이제 그런후 밑에 명령어를 복사 붙여 넣기 하시면 됩니다.


Swift 만 사용 하셨다면

1
find . \( -iname \*.swift \) -exec wc -l '{}' \+
cs


Objective-C만 사용 하셨다면

1
find . \( -iname \*.m -o -iname \*.mm -o -iname \*.h \) -exec wc -l '{}' \+
cs


Swift와 Objective-C를 혼용해서 사용 하셨다면

1
find . \( -iname \*.m -o -iname \*.mm -o -iname \*.h -o -iname \*.swift \) -exec wc -l '{}' \+
cs


그리고 마지막으로 

Swift + Objective-C + C + C++

1
find . \( -iname \*.m -o -iname \*.mm -o -iname \*.c -o -iname \*.cc -o -iname \*.h -o -iname \*.hh -o -iname \*.hpp -o -iname \*.cpp -o -iname \*.swift \) -exec wc -l '{}' \+
cs


이렇게 명령어를 치시면 프로젝트에 포함되어 있는 파일 목록들이 나열되면서 마지막에 total 값으로 라인수가 나옵니다.


제가 Project9팀에 있을때 했던 프로젝트 결과값입니다. 3만5천 줄로 나오네요. 

아무래도 Pod나 framework도 포함 되다 보니깐 조금 과장되서 나오는 것도 없진 않지만 그래도 가끔 얼마나 길까 하면서 

알아볼때 유용하게 사용 할 수 있는것 같습니다.



출처 

http://stackoverflow.com/questions/7224569



'프로그래밍 > 기타' 카테고리의 다른 글

Color Scripter (코드를 블로그에 올리기)  (0) 2015.11.18
앱 개발에서의 권한 문제  (0) 2015.11.18
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안녕하세요. 정말 오랜만에 글을 쓰는거 같습니다. 

iOS10.. Swift3.0으로 넘어오면서 정말,, 베타 나오면 바로 개인적으로 해야되는데 

iOS개발을 한건 별로 안되지만 그래도 7부터 10까지 업뎃되면서 가장 많은 변화가 있지 않았나 싶을정도 변화가 많았습니다.

특히 Range에 부분이 많은 부분 변경 되었습니다. 

오늘 포스트 할 내용은 텍스트안에서 특정 텍스트의 시작 location을 찾는 것입니다.

Objective-C와 Swift2.3이하 버전에서는 뭐랄까 편하게 찾을 수 있었던거 같은데 3.0부터는 많은 변화가 있었습니다.

(2.3이하 버전은 제가 테스트 할 수 있는 환경이 없어서 적지 않았습니다 ㅠㅠ 죄송합니다.ㅠㅠ)


Objective-C

1
2
3
4
5
6
7
8
NSString * str = @"테스트 텍스트 입니다.";
NSString * search = @"텍스트"
NSRange range = [str rangeOfString:@"how are you doing"];
if (range.location == NSNotFound) {
    NSLog(@"없는 텍스트 입니다.");
else {
    NSLog(@"loc %d, len %d", range.location, range.length);        
}
cs



Swift3.0

1
2
3
4
5
6
7
8
let str = "테스트 텍스트 입니다"
let search = "텍스트"
        
let range: Range<String.Index> = str.range(of: search)!
let location : Int = str.distance(from: str.startIndex, to: range.lowerBound)
let length : Int = search.characters.count
        
print("loc \(location), len \(length)")
cs


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



안녕하세요.

정말 오랜만에 글을 쓰는 것 같습니다.


이번 포스트는 아이폰 무음 모드에서도 소리가 나는 방법에 대해서 입니다.

음악 앱 또는 유튜브등 여러 앱들은 무음모드에서도 재생시 소리가 납니다. 

세팅을 해주지 않으면 동영상만 재생 될뿐 소리는 아무소리도 안나옵니다.

재생되기전 또는 ViewDidLoad()에 이 코드를 삽입 해주면 무음모드에서도 소리가 재생 됩니다.


(Obective-C)

1
2
3
AVAudioSession * session = [AVAudioSession sharedInstance];
[session setCategory: AVAudioSessionCategoryPlayback error: nil];
 
cs


(Swift)

1
2
3
4
5
6
do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
    try AVAudioSession.sharedInstance().setActive(true)
catch {
    print(error)
}
cs



'iOS 프로그래밍 > iOS' 카테고리의 다른 글

OS_ACTIVITY_MODE  (0) 2016.11.08
iOS)텍스트 위치 가져오기  (0) 2016.10.10
iOS)사진첩에 사진 저장하기  (0) 2016.06.12
iOS)디바이스 정보 가져오기  (0) 2016.06.08
iOS)딕셔너리 키값 정렬 하기  (0) 2016.06.06
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



안녕하세요. 개발자 myoung입니다.

개발을 완료 한 후 정말 역사적으로 앱스토어에 앱을 올릴려고 하는데 ENABLE_BITCODE 오류가 나서 당황할때가 있습니다.

그냥 개발을 할때는 문제가 없는데 말입니다.ㅠㅠ 이럴때는 당황하시지 말고

'Build Settings'에 있는 'Enable Bitcode'를 YES로 바꿔주시면 됩니다.


반대로 이런 오류가 난다면

You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64...

'Enable Bitcode' 옵션을 NO로 해주시면 됩니다.


BitCode 란?

Bitcode is an intermediate representation of a compiled program. Apps you upload to iTunes Connect that contain bitcode will be compiled and linked on the store. Including bitcode will allow Apple to re-optimize your app binary in the future without the need to submit a new version of your app to the store. For iOS apps, bitcode is the default, but optional. For watchOS and tvOS apps, bitcode is required. If you provide bitcode, all apps and frameworks in the app bundle (all targets in the project) need to include bitcode


비트 코드는 컴파일  프로그램의 중간 표현입니다비트 코드를 포함하면 아이튠즈 커넥트에 업로드앱은 컴파일 저장소에 연결됩니다비트 코드를 포함하면 애플 스토어에 앱의  버전을 제출할 필요 없이 미래에  바이너리를 다시 최적화할  있고iOS 앱의 경우 비트 코드 옵션은 선택 사항이고, watchOS  tvOS 앱의 비트 코드가 필수로 적용되어야 한다.  - iOS Developer Library



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



안녕하세요 개발자 myoung 입니다. Swift 기준으로 설명을 하겠습니다.


URL nil 오류 나는 문제에 대해서 해결 방안을 알아보겠습니다.

보통 URL을 정의 할때는 이렇게 정의를 합니다.

1
2
let urlPath: String = "www.naver.com"
let url: NSURL = NSURL(string: urlPath)!
cs

물론 URL 자체가 비어 있어서 nil오류가 나는 경우도 있지만 주소 자체에 한글이 포함된 경우 nil 오류가 나는 경우가 있습니다.

그런경우 해결 방법은

1
2
3
4
let str_temp = "http://devsc.tistory.com/admin/entry/post/한글"
let str_url = str_temp.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!
 
let url: NSURL = NSURL(string: str_url)!
cs

이런식으로 String URLQueryAllowedCharacterSet을 통해 인코딩을 하면 간단하게 해결됩니다.


궁금한점이나 오류가 있으면 댓글을 달아주세요 :)



336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



안녕하세요. 개발자 myoung 입니다. 

오늘은 저장하고 싶은 이미지를 사진 앱에 노출이 될수 있도록 저장하는 방법에 대해서 알아보겠습니다.

다른 특별한 옵션을 주지 않고 단순하게 사진을 저장할때 사용 할수있는 방법입니다.

생각보다 너무 간단하고 한줄로 끝납니다.


(Obejctive-C)

1
2
3
4
5
6
7
8
9
10
11
//필요한 부분에서 호출
UIImageWriteToSavedPhotosAlbum(your_image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
    if (error) {
        NSLog(@"error: %@", [error localizedDescription]);
    } else {
        NSLog(@"saved");
    }
}
cs


(Swift)

1
2
3
4
5
6
7
8
9
10
11
12
//필요한 부분에서 호출
UIImageWriteToSavedPhotosAlbum(img, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
 
func image(_ image: UIImage, didFinishSavingWithError error: NSError?, contextInfo: UnsafeRawPointer) { 
       //사진 저장 한후
       if let error = error {
           // we got back an error!
           Toast(message: error.localizedDescription).show()  
       } else {
            // save    
       }
}
cs


궁금한점이나 틀린점이 있으면 언제든지 댓글을 달아 주세요. :)



'iOS 프로그래밍 > iOS' 카테고리의 다른 글

iOS)텍스트 위치 가져오기  (0) 2016.10.10
iOS)무음에서 소리 나오게 하기  (0) 2016.07.19
iOS)디바이스 정보 가져오기  (0) 2016.06.08
iOS)딕셔너리 키값 정렬 하기  (0) 2016.06.06
iOS)랜덤 함수  (0) 2016.05.26
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



안녕하세요. 개발자 myoung 입니다.

오늘은 iOS의 사용자 기기이름, 버전등을 가지고 올때 사용하는 currentDevice에 대해서 포스팅 하겠습니다.

애플 문서를 보게 되면

1
2
3
4
5
6
7
public var name: String { get } // e.g. "My iPhone"
public var model: String { get } // e.g. @"iPhone", @"iPod touch"
public var localizedModel: String { get } // localized version of model
public var systemName: String { get } // e.g. @"iOS"
public var systemVersion: String { get } // e.g. @"4.0"
public var orientation: UIDeviceOrientation { get } 
// return current device orientation.  this will return UIDeviceOrientationUnknown unless device orientation notifications are being generated.
cs


UIDevice 하위에 포함되어 있는 메소드 이며, 현재 디바이스에 대한 정보를 리턴해주는 메소드 입니다.

단일 객체로 이름, 모델, 모델의 지역 버전, 시스템이름, 시스템버전,  디바이스 현재 방향 String 객체를 리턴해주는 것을 알 수 있습니다.

이런식으로 사용 하시면 됩니다.


(Objective-C)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
NSLog(@"%@", [UIDevice currentDevice].name);
NSLog(@"%@", [UIDevice currentDevice].model);
NSLog(@"%@", [UIDevice currentDevice].localizedModel);
NSLog(@"%@", [UIDevice currentDevice].systemName);
NSLog(@"%@", [UIDevice currentDevice].systemVersion);
NSLog(@"%ld", (long)[UIDevice currentDevice].orientation)
 
//결과 값
iPhone Simulator
iPhone
iPhone
iPhone OS
9.3
0
cs


(swift)

1
2
3
4
5
6
7
8
9
10
11
12
13
print(UIDevice.currentDevice().name)
print(UIDevice.currentDevice().model)
print(UIDevice.currentDevice().localizedModel)
print(UIDevice.currentDevice().systemName)
print(UIDevice.currentDevice().systemVersion)
print(UIDevice.currentDevice().orientation)
        
//결과 값
iPhone Simulator
iPhone
iPhone
iPhone OS
9.3
cs

궁금한 점이나 틀린 부분이 있다면 댓글을 남겨 주세요!



'iOS 프로그래밍 > iOS' 카테고리의 다른 글

iOS)무음에서 소리 나오게 하기  (0) 2016.07.19
iOS)사진첩에 사진 저장하기  (0) 2016.06.12
iOS)딕셔너리 키값 정렬 하기  (0) 2016.06.06
iOS)랜덤 함수  (0) 2016.05.26
iOS)TTS(Text-to-Speech) 사용하기.  (0) 2016.05.19
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



안녕하세요. 개발자 myoung입니다.

NSMutableDictionary, NSDictionary을 사용 할때 키값을 이용해서 필요한 값을 꺼내서 사용하는데, 전체 키값을 정렬해야 하는 상황이 있습니다.

그때 딕셔너리의 전체 키값을 가지고 와서 내림차순 또는 오름차순으로 정렬해주는  방법입니다.


(Obejctive-C)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
NSMutableDictionary * dic = [[NSMutableDictionary alloc]init];
[dic setObject:@"2" forKey:@"key2"];
[dic setObject:@"1" forKey:@"key1"];
[dic setObject:@"4" forKey:@"key4"];
[dic setObject:@"3" forKey:@"key3"];
    
//오름차순
NSArray * arr_ascending = [dic keysSortedByValueUsingComparator: ^(id obj1, id obj2) {
    if ([obj1 integerValue] > [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedDescending;
    }
    if ([obj1 integerValue] < [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
}];
NSLog(@"%@", arr_ascending);
    
//내림 차순
NSArray * arr_descending = [dic keysSortedByValueUsingComparator: ^(id obj1, id obj2) {
    if ([obj1 integerValue] < [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedDescending;
    }
    if ([obj1 integerValue] > [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
}];
NSLog(@"%@", arr_descending);
cs



(Swift)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let dic = NSMutableDictionary()
        dic.setObject("2", forKey: "key2")
        dic.setObject("1", forKey: "key1")
        dic.setObject("4", forKey: "key4")
        dic.setObject("3", forKey: "key3")
        
print(dic)
        
let arr_key = dic.allKeys.sort {
    //오름차순
    //$0.compare($1 as! String, options: .NumericSearch) == .OrderedAscending
    
    //내림차순
    $0.compare($1 as! String, options: .NumericSearch) == .OrderedDescending
}
 
print(arr_key)
cs




'iOS 프로그래밍 > iOS' 카테고리의 다른 글

iOS)사진첩에 사진 저장하기  (0) 2016.06.12
iOS)디바이스 정보 가져오기  (0) 2016.06.08
iOS)랜덤 함수  (0) 2016.05.26
iOS)TTS(Text-to-Speech) 사용하기.  (0) 2016.05.19
iOS)iPhone 해상도  (0) 2016.05.09
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



일반 앱을 만들때는 쓸일이 별로 없을 것 같은 랜덤 함수지만 쓰임새가 아주 많은 함수입니다. 

숫자 10에 위치한 곳에 원하는 숫자를 넣어 주시면 됩니다. 

만약 10을 넣고 돌리시면 0~10까지 사이에서 랜덤하게 숫자가 randomIndex 변수에 저장됩니다.


(Objective-C)

1
int randomIndex = arc4random() % 10;
cs


(Swift)

1
let randomIndex : Int = Int(arc4random_uniform(10))
cs



'iOS 프로그래밍 > iOS' 카테고리의 다른 글

iOS)디바이스 정보 가져오기  (0) 2016.06.08
iOS)딕셔너리 키값 정렬 하기  (0) 2016.06.06
iOS)TTS(Text-to-Speech) 사용하기.  (0) 2016.05.19
iOS)iPhone 해상도  (0) 2016.05.09
iOS)단어 정의 사전으로 찾기  (0) 2016.05.04

+ Recent posts