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


String에서 숫자만 꺼내오기

안녕하세요. 개발자 Myoung 입니다. 오늘 포스팅 내용은 String안에서 숫자만 검색해서 index와 무슨 숫자인지 알 수 있는 방법입니다.

let digitSet = CharacterSet.decimalDigits

for (index, ch) in myString.unicodeScalars.enumerated() {
    if digitSet.contains(ch) {
        print("\(index), \(ch),  숫자입니다”)
    }
}


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


안녕하세요. 개발자 myoung입니다.
Custom FrameWork 만들어 사용할때 클래스를 찾을 수 없을 때 해결 방안입니다.
Custom FrameWork를 만들어서 빌드후 프로젝트에 추가를 하게되면 시뮬레이터에서 돌렸을 때는 실제 프로젝트에서 시뮬레이터에서만 사용이 가능하고, 실제기기에서 돌렸을 때는 실제기기로 빌드를 할때만 사용이 가능합니다.

BUild Phases에 Run Script를 추가해준 다음 추가해 주시면 됩니다.


######################
# Options
######################

REVEAL_ARCHIVE_IN_FINDER=false

FRAMEWORK_NAME="${PROJECT_NAME}"

SIMULATOR_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${FRAMEWORK_NAME}.framework"

DEVICE_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphoneos/${FRAMEWORK_NAME}.framework"

UNIVERSAL_LIBRARY_DIR="${BUILD_DIR}/${CONFIGURATION}-iphoneuniversal"

FRAMEWORK="${UNIVERSAL_LIBRARY_DIR}/${FRAMEWORK_NAME}.framework"


######################
# Build Frameworks
######################

xcodebuild -workspace ${PROJECT_NAME}.xcworkspace -scheme ${PROJECT_NAME} -sdk iphonesimulator -configuration ${CONFIGURATION} clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator 2>&1

xcodebuild -workspace ${PROJECT_NAME}.xcworkspace -scheme ${PROJECT_NAME} -sdk iphoneos -configuration ${CONFIGURATION} clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos 2>&1

######################
# Create directory for universal
######################

rm -rf "${UNIVERSAL_LIBRARY_DIR}"

mkdir "${UNIVERSAL_LIBRARY_DIR}"

mkdir "${FRAMEWORK}"


######################
# Copy files Framework
######################

cp -r "${DEVICE_LIBRARY_PATH}/." "${FRAMEWORK}"


######################
# Make an universal binary
######################

lipo "${SIMULATOR_LIBRARY_PATH}/${FRAMEWORK_NAME}" "${DEVICE_LIBRARY_PATH}/${FRAMEWORK_NAME}" -create -output "${FRAMEWORK}/${FRAMEWORK_NAME}" | echo

# For Swift framework, Swiftmodule needs to be copied in the universal framework
if [ -d "${SIMULATOR_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/" ]; then
cp -f ${SIMULATOR_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/* "${FRAMEWORK}/Modules/${FRAMEWORK_NAME}.swiftmodule/" | echo
                                                                      fi

                                                                      if [ -d "${DEVICE_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/" ]; then
                                                                      cp -f ${DEVICE_LIBRARY_PATH}/Modules/${FRAMEWORK_NAME}.swiftmodule/* "${FRAMEWORK}/Modules/${FRAMEWORK_NAME}.swiftmodule/" | echo
                                                                      fi

                                                                      ######################
                                                                      # On Release, copy the result to release directory
                                                                      ######################
                                                                      OUTPUT_DIR="${PROJECT_DIR}/Output/${FRAMEWORK_NAME}-${CONFIGURATION}-iphoneuniversal/"

                                                                      rm -rf "$OUTPUT_DIR"
                                                                      mkdir -p "$OUTPUT_DIR"

                                                                      cp -r "${FRAMEWORK}" "$OUTPUT_DIR"

                                                                      if [ ${REVEAL_ARCHIVE_IN_FINDER} = true ]; then
                                                                      open "${OUTPUT_DIR}/"
                                                                      fi

이렇게 되면 Custom Framework가 universal 형태로 만들어져서 프로젝트에 적용 하면 시뮬레이터나 실제기기에서도 상관없이 사용이 가능합니다.



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


iOS 키보드 타입

안녕하세요. 개발자 Myoung 입니다.
오늘은 iOS 키보드 타입에 대한 포스팅입니다. Objective-C,Swift 둘다 해당되는 타입형태입니다. UITextFeild, UITextView등 키보드를 사용하는 뷰에서 사용됩니다.



키보드 타입 종류

typedef enum {
        UIKeyboardTypeDefault,                  // 기본적인 키보드
        UIKeyboardTypeASCIICapable,             // 영문만 표시되는 키보드
        UIKeyboardTypeNumbersAndPunctuation,    // 숫자와 특수문자가 표시되는 키보드
        UIKeyboardTypeURL,                      // URL을 입력할 수 있도록 .과 / 그리고 .com이 키보드 영역에 표시되는 키보드
        UIKeyboardTypeNumberPad,                // 숫자를 입력하는 키패드 형식의 키보드
        UIKeyboardTypePhonePad,                 // 전화 번호를 입력할 수 있는 키패드 형식의 키보드
        UIKeyboardTypeNamePhonePad,             // 대문자 입력이 불가한 키보드
        UIKeyboardTypeEmailAddress,             // 이메일을 입력할 수 있도록 @와 .이 키보드 영역에 표시되는 키보드
        UIKeyboardTypeDecimalPad,               // 소숫점을 입력할 수 있는 키패드 형식의 키보드
        UIKeyboardTypeTwitter,                  // 트위터 입력을 빠르게 할 수 있도록 @와 #이 추가된 키보드
        UIKeyboardTypeWebSearch,                // URL 및 검색어 입력에 최적화 됨 (공백 및. 표시)
        UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable, // 더 이상 사용 안함
    } UIKeyboardType;


사용법

사용법은 매우 간단 합니다. 코드로는 setKeyboardType을 사용하시면 됩니다.

ObjectiveC

[textField setKeyboardType:UIKeyboardTypeEmailAddress]

Swift

textField.keyboardType = .default

스토리 보드 상에서는 UITextFeild, UITextView View에 추가 하신 후 오른쪽 항목에서 보시면 KeyBoard Type이 있습니다. 거기서 적절하게 선택 해주시면 됩니다.



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



안녕하세요.

오늘은 텍스트 필드에 여백을 주는 방법에 대해서 포스팅 하겠습니다.

UITextView는 동서남북 여백을 줄 수 있지만 UITextField는 UITextView방식으로는 여백을 줄이고 늘릴수가 없습니다.

그래서 UIView안에 UITextField를 넣고 여백을 주는 방법도 있지만 rightView와 leftView를 통해서 여백을 줄수 있습니다.


extension을 통해 UITextField에 메소드를 추가해줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
extension UITextField {
    func setLeftPaddingPoints(_ amount:CGFloat){ //왼쪽에 여백 주기
        let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.size.height))
        self.leftView = paddingView
        self.leftViewMode = .always
    }
 
    func setRightPaddingPoints(_ amount:CGFloat) { //오른쪽에 여백 주기
        let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.size.height))
        self.rightView = paddingView
        self.rightViewMode = .always
    }
}
 
//사용방법
let textfield = UITextField(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
textfield.setLeftPaddingPoints(20)
textfield.setRightPaddingPoints(20
cs

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

잘못된 점이 있으면 댓글 말씀해주시면 수정하겠습니다.

감사합니다.



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



안녕하세요. iOS 개발을 하고 있는 Myoung 입니다.


UI를 그리다보면 BorderWidth 와 BorderColor를 이용해서 View의 테투리를 그려줄때가 많습니다.

일반적으로 border를 이용해서 그리는 방법은 이렇게 사용을 합니다. 그럼 테투리가 자연스럽게 Width 만큼생기게 되죠.

1
2
3
4
let view = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
view.layer.borderColor = UIColor.red.cgColor
view.layer.borderWidth = 1.0
view.addSubview(view)
cs


하지만 UI를 그리다보면 한쪽만 혹은 한쪽을 남겨두고 그릴때가 있습니다. 

extension을 통해 CALayer에 메소드를 추가해줍니다.

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
extension CALayer {
    func addBorder(_ arr_edge: [UIRectEdge], color: UIColor, width: CGFloat) {
        for edge in arr_edge {
            let border = CALayer()
            switch edge {
            case UIRectEdge.top:
                border.frame = CGRect.init(x: 0, y: 0, width: frame.width, height: width)
                break
            case UIRectEdge.bottom:
                border.frame = CGRect.init(x: 0, y: frame.height - width, width: frame.width, height: width)
                break
            case UIRectEdge.left:
                border.frame = CGRect.init(x: 0, y: 0, width: width, height: frame.height)
                break
            case UIRectEdge.right:
                border.frame = CGRect.init(x: frame.width - width, y: 0, width: width, height: frame.height)
                break
            default:
                break
            }
            border.backgroundColor = color.cgColor;
            self.addSublayer(border)
        }
    }
}
cs


사용법은 간단합니다. 원하는 뷰에 layer를 통해서 사용 하시면 됩니다. 

1
your_view.layer.addBorder([.top, .bottom], color: UIColor.white, width: 1.0)
cs

UIRectEdge의 속성은 총 다섯개가 있습니다.

1
2
3
4
5
UIRectEdge.all, //전체 
UIRectEdge.top, //상단
UIRectEdge.bottom, //하단
UIRectEdge.left, //왼쪽
UIRectEdge.right, //오른쪽
cs

원하는 방향을 Array로 묶어서 layer를 통해 추가해주시면 됩니다. 이왕이면.. 한쪽만 뻥뚫린 UI가 없었으면 하지만 생각보다 간단하게 해결 할 수 있습니다.


틀린점이나 오타 부족한점이 있으면 언제든지 댓글를 남겨주세요.



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 크기의 광고 코드만 넣을 수 있습니다.



XCode 8 버전 부터 OS_ACTIVITY_MODE가 추가 되었습니다.

os의 시스템관련 로그를 쭉 출력 해주는 모드인데 너무 많이 찍혀서 정작 

제가 개발을 하면서 출력하는 로그는 하나도 볼 수 없다는 단점있습니다.

안보이게 하는 방법은 생각보다 간단합니다.

1. product -> Scheme -> edit scheme -> environment Variables


2. environment Variables에 +클릭해서


3. Name 값에 OS_activity_mode 

    Value 값에 disable 


넣어 주시면 됩니다. 그럼 더이상 시스템 로그는 출력되지 않습니다.



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 크기의 광고 코드만 넣을 수 있습니다.



앱스토어의 정보를 받아와서 최신 버전과 다르면 업데이트를 할 수 있게 하는 로직을 포함해서 심사를 맡겼는데 리젝을 당했습니다.

특별한 것은 없고 앱버전의 업데이트는 자기네 메카니즘을 따라야 한다는 내용입니다.

해결 방안으로는 단순히 업데이트 로직을 제거 해주면 해결되는 부분입니다.

업데이트가 필수적으로 필요한 시점이면 어떤 방식으로 해야되는지 정말 궁금해집니다.


(리젝 사유 본문)

Your app includes an update button or alerts the user to update the app. To avoid user confusion, app version updates must utilize the iOS built-in update mechanism. 

Next Steps

Please remove the update feature from your app. To distribute a new version of your app, upload the new app binary version into the same iTunes Connect record you created for the app's previous version. Updated versions keep the same Apple ID, iTunes Connect ID (SKU), and bundle ID as the original version, and are available free to customers who purchased a previous version. 



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

+ Recent posts