클립보드로 텍스트 복사

설명

가끔 앱을 만들다 보면 클립보드에 텍스트를 복사하는 경우가 필요합니다.
코드 한줄이면 원하는 텍스트가 클립보드에 복사가 되며, 다른 텍스트 적는 곳에 가서 붙여 넣기를 할 수 있습니다.


사용환경

* Swift 4.2
* XCode 10.0


코드

//Swift
UIPasteboard.general.string = "ex)안녕하세요"

//Objective-C
[[UIPasteboard generalPasteboard] setString:@"안녕하세요"];


맞치며

사용자들에게 텍스트 관련 편의성을 제공하는 메소드 입니다. 초대코드나 내 앱이 아닌 다른 앱에서 텍스트를 사용해야할 경우 유용하게 쓰입니다.
틀린점이나 수정해야 할 부분이 있으면 댓글 남겨주세요! 감사합니다 :)



몸무게매니저 - 몸무게를 효과적으로 관리 하세요!

소개

여섯번째로 소개할 앱은 “몸무게매니저” 입니다.
몸무게를 관리 하기 쉽게 만들려고 만든 어플리케이션입니다.
간단하게 그날 몸무게와 메모를 적고 그래프를 통해 변화를 알수 있는 어플입니다.

정보

이름 - 몸무게매니저
지원OS - iOS
가격 - 무료

주요기능

자신의 몸무게를 관리 하시는 분들을 위한 어플입니다.
한눈의 자신의 몸무게 변화를 확인 하세요.

주요 기능
1) 그래프 형식의 몸무게 변화

  • 그래프 형식으로 자신의 몸무게의 변화를 일,주,월,년 단위로 알수 있습니다.
  • 그래프 옆에 자신의 목표 몸무게까지 달성 퍼센트가 표시됩니다.

2) 목표 몸무게를 설정 할 수 있습니다.

  • 목표를 세워 더 빠르게 목표를 향해 달려 갈 수 있습니다.

3) 메모 기능

  • 그날 몸무게를 적으면서 메모를 해 나중에 회고를 하세요.

4) BMI

  • BMI를 통해 자신의 몸의 비만도 상태를 간접적으로 알 수 있습니다.
    (* BMI(체질량 지수)는 인간의 비만도를 나타내는 지수로, 체중과 키의 관계로 계산됩니다.)

앱 이미지

내주변화장실 - 생리현상을 참으면 병 걸립니다.

소개

다섯번째로 소개할 앱은 “내주변화장실” 입니다.
공공데이터를 이용해서 만든 어플리케이션 입니다.
현재 위치를 기반으로 반경 1km 안에 있는 공공화장실을 지도에 보여줍니다.
안드로이드는 아직 지원이 되지 않습니다.

정보

이름 - 내주변화장실
지원OS - iOS
가격 - 무료

주요기능

내 주변에 있는 공공 화장실 위치와 정보를 알려드립니다.

1) 반경 1km 안에 있는 공공 화장실 위치를 알려드립니다.

  • 정보 제공은 공공 데이터에서 제공 받았습니다.

2) 화장실에 대한 자세한 정보를 제공합니다.

  • 주소, 담당기관, 전화번호, 시설에 관한 정보

3) 원하는 지역의 화장실 정보를 저장 할 수있습니다.

  • 행정구역(특별시, 광역시, 도) 형태로 정보를 제공합니다.

생리현상은 살면서 누구나 겪는 매우 자연스러운 현상입니다. 우리의 몸은 항상성을 유지하기 위해 다양한 활동을 하고 있으며 이때 불필요한 것들을 배출하는 것이 바로 생리현상이다. 즉 참으면 병에 걸립니다.

어플리케이션 이미지



info.plist 내용 코드로 가져오기


설명

안녕하세요. 앱이름, 앱버전, 앱빌드정보등 앱을 만들면서 필수적으로 필요한 정보들이 있습니다. 물론 앱을 만들면서 적절히 활용도 할 수 있습니다. 기본적인 내용은 info.plist 파일에 있는 내용들을 코드로 가져와서 사용하는 부분입니다. 왼쪽에 file list에서 info.plist 파일을 선택한 후 XCode에 오른쪽 상단에 있는 버튼 중에 Comparison이라는 버튼을 클릭 하면 코드 형식으로 info.plist를 볼 수 있습니다. 그 내용을 코드로 가지고 와서 필요한 부분 꺼내서 쓰는 코드 입니다. 세팅값에 따라 가져 올수 있는 정보의 양이 많기 때문에 이 포스트에서는 앱이름, 앱버전, 앱빌드버전 그리고 앱이 지원하는 미니멈SDK버전만 가지고 오겠습니다.


사용환경

* Swift 4.0
* XCode 9.2

코드

옵셔널 형태로 가져오기 때문에 if문을 통해서 옵셔널을 벗겨서 사용을 해야 앱이 튕기지 않고 잘 사용 하실수 있습니다.

if let infoDic: [String: Any] = Bundle.main.infoDictionary {
    if let appName: String = infoDic["CFBundleName"] as? String { print("appName = \(appName)") }
    if let appVersion: String = infoDic["CFBundleShortVersionString"] as? String { print("appVersion = \(appVersion)") }
    if let appBuild: String = infoDic["CFBundleVersion"] as? String { print("appBuild - \(appBuild)") }
    if let minimumOSVersion: String = infoDic["MinimumOSVersion"] as? String { print("minimumOSVesion - \(minimumOSVersion)") }
} else {
    print("Not Info")
}
//출력 결과
appName = 노스모킹
appVersion = 1.0.0
appBuild - 1
minimumOSVesion - 9.0

맞치며

info.plist 파일에 있는 내용은 매우 중요한 정보들이 들어 있습니다. 코드로 가져왔던 앱버전,앱이름등등 사실 앱을 만들면서 코드로 가져와서 사용되는 부분이 극히 적을수 있습니다. 필요한 정보만 가지고 와서 활용을 하면 됩니다. 감사합니다. 틀린점이나 궁금한점 있으시면 댓글 남겨주세요 :)





리뷰 페이지로 이동하기

설명

앱을 평가받는 중요한 요소중 하나인 리뷰입니다. 리뷰를 쓸수 있게 유도하는것도 좋은 방법이고, iRate 라는 오픈소스를 통해 알트 창을 띄어 유도하는 방법도 있습니다. 앱스토어 리뷰 페이지로 이동 시켜주는 코드 입니다. 고유 아이디 부분에 어플 고유 아이디를 삽입 한후 실행 시키면 리뷰 페이지로 이동합니다. 앱 아이디는 아이튠즈 웹페이지에 들어가셔서 주소를 확인하면 뒤에 id부터 ?까지가 앱 아이디 입니다. 개발자 사이트에 나와있는 고유 아이디와 같습니다.


사용환경

* Swift 4.x
* Xcode 9.2

소스코드

YourAppID 부분에 아이튠즈에 나와있는 고유ID를 넣어주시면 됩니다. 출시전에도 앱의 고유아이디는 받아 올 수 있습니다.

if let reviewURL = URL(string: "itms-apps://itunes.apple.com/app/itunes-u/id\(YourAppID)?ls=1&mt=8&action=write-review"), UIApplication.shared.canOpenURL(reviewURL) { // 유효한 URL인지 검사합니다.
    if #available(iOS 10.0, *) { //iOS 10.0부터 URL를 오픈하는 방법이 변경 되었습니다.
        UIApplication.shared.open(reviewURL, options: [:], completionHandler: nil)
    } else {
        UIApplication.shared.openURL(reviewURL)
    }
}

맞치며

앱 개발자로서 좋은 리뷰를 받으면 정말 기분이 좋습니다. 내 앱에 대해서 평가가 안 좋을수도 있지만 리뷰를 통해 많은 분들이 앱이 나아가야 하는 방향등 여러가지를 가르쳐줍니다. 리뷰를 통해 발전된 앱을 유저들에게 제공하는 것도 앱개발자로서 역할인거 같습니다. 틀린점이나 궁금한 점 있으시면 언제든지 댓글로 알려주시면 대답해 드리겠습니다. 감사합니다.





위도와 경도로 주소 가져오기

설명

안녕하세요. 오랜만에 포스트를 올리네요. 오늘 할 포스트 내용은 iOS에서 위도와 경도를 가지고 해당 주소를 알아내는 소스코드입니다. 사진을 찍을때 위치정보가 같이 저장된다면 사진첩 어플에서 지도에 사진이 위치별로 표시되는 기능이 있습니다. 사진에 저장된 위치를 기반으로 표현을 하는겁니다. 사진에 있는 위치를 알아오는 법은 나중에 한번더 포스트해서 정리 하겠습니다. 코드 자체는 매우 간단합니다. CLLocation에 해당 위도,경도를 넣어주신 다음에 CLGeocoder 객체를 사용하셔서 받아오시면 됩니다.


사용환경

* Swift4.x
* Xcode 9.1

소스 코드

import CoreLocation

//latitude: 위도, 도: 경도
let findLocation = CLLocation(latitude: 37.576029, longitude: 126.976920)
let geocoder = CLGeocoder()
let locale = Locale(identifier: "Ko-kr") //원하는 언어의 나라 코드를 넣어주시면 됩니다.
geocoder.reverseGeocodeLocation(findLocation, preferredLocale: locale, completionHandler: {(placemarks, error) in
    if let address: [CLPlacemark] = placemarks {
        if let name: String = address.last?.name { print(name) } //전체 주소
    }
})

CLPlacemark에 들어있는 정보들

CLPlacemark에 대한 정보는 밑에 있는 도큐멘트에서 알아 볼 수 있습니다. 필요한 부분만 가져다가 쓰시면 될거 같습니다.

CLPlaceMark에 대한 애플 도큐멘트

맞치며

위치기반 시스템이 들어간 앱이라면 많이 사용 하시는 부분입니다. 포스트를 하면서 드는 생각인데 추가적으로 현재 위치를 가져오는 부분도 추가로 포스팅 작업을 하겠습니다. 틀린점이나 궁금한점 있으시면 언제든지 댓글로 말해주세요 :)



  1. 2019.06.01 22:28

    비밀댓글입니다



UIAlertController - actionSheet

안녕하세요. 개발자 myoung입니다. UIAlertController에는 두가지 스타일 있습니다. actionSheet와 alert입니다. 오늘 포스팅 내용은 actionSheet에 대한 포스팅입니다. Alert가 알려주는 기능이었다면, ActionSheet는 주로 사용자에게 여러가지 선택 사항이 있을때, 간편하게 선택 할 수 있도록 하는 Controller입니다.

사용 환경

  • Swift3.x
  • Xcode 8.3.3

사용의 예

Alt text
<이미지 1>

사용 방법

가장 기본적인 사용 방법은 Alert과 별반 다르지 않습니다. 타이틀, 메세지에 원하는 텍스트를 넣어주고 UIAlertAction을 통해 선택 할 수 있는 항목을 정해주면 됩니다. 선택개수는 추가한 UIAlertAction 개수에 따라 선택 메뉴가 형성이 됩니다. ( 맨 아래에 취소 버튼을 안 추가 해주시면 무조건 선택을 해야 Controller가 지워지기 때문에 필요없지 않는 이상 넣어줍니다.)

let actionSheet = UIAlertController(title: "Title",
                                            message: "Message",
                                            preferredStyle: .actionSheet)
actionSheet.addAction(UIAlertAction(title: "menu1", style: .default, handler: { result in
           //doSomething
        }))
actionSheet.addAction(UIAlertAction(title: "menu2", style: .default, handler: { result in
            //doSomething
        }))
actionSheet.addAction(UIAlertAction(title: "취소", style: .cancel, handler: nil))
self.present(actionSheet, animated: true, completion: nil)

마치며

메뉴에 대한 개수는 따로 정해져 있지 않지만 많으면 많을수록 로딩(개발자 입장에서는 로딩이지만 사용자 입장에서는 순간 멈춘것처럼 느껴지죠)이 길어집니다. 메뉴가 많아지면 자연스럽게 테이블뷰 처럼 스크롤이 가능하게 됩니다. alert 스타일보다는 활용도가 많다고는 할수 없지만 작은 화면 많은 것을 표현해야되기 때문에 선택메뉴는 이런식으로 많이 구현을 하게 됩니다. 이것또한 커스텀보다는 쉽게 구현 할 수 있기 때문에 디자인이 문제가 되지 않는다면 이런식으로 사용하는것도 나쁘지 않는거 같습니다. 이번 포스트는 여기까지입니다. 틀린점이나 궁금한점이 있다면 언제든지 댓글을 남겨주시면 감사합니다 :)





UIAlertController - alert

안녕하세요. 개발자 myoung입니다. UIAlertController에는 두가지 스타일 있습니다. actionSheet와 alert입니다. 오늘 포스팅 내용은 alert에 대한 포스팅입니다. Alert은 주로 사용자에게 변경 사항이라던지 여러 알림을 알려주기 위해서 사용됩니다.


사용의 예

Alt text
<이미지 1>

Alt text
<이미지 2>


사용 방법

가장 기본적인 사용 방법입니다.다. 타이틀, 메세지에 원하는 텍스트를 넣어주고 취소버튼, 확인 버튼을 통해 실행 하고자 하는 부분을 실행 하시면 됩니다. 액션버튼을 하나 이상으로 해주시면 최대 몇개까지는 모르겠지만 그래도 따로 커스텀으로 만들지 않아도 편하게 Alert창을 만들어서 사용 할 수 있습니다.

let alert = UIAlertController(title: "타이틀", message: "메세지", preferredStyle: .alert)
let action_cancel = UIAlertAction(title: "취소", style: .default, handler: { result in 
                        //do something
                    })
alert.addAction(action_cancel)
let alert_done = UIAlertAction(title: "확인", style: .default, handler: { result in
                        //do something
                    })
alert.addAction(alert_done)
self.present(alert, animated: true, completion: nil)

텍스트 필드를 이용해서 <이미지2>와 같이 사용 하실 수 있습니다. 사용법은 아래와 같습니다.

let alert = UIAlertController(title: "타이틀", message: "메세지", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "취소", style: .default, handler: nil))
alert.addAction(UIAlertAction(title: "건너뛰기", style: .default, handler: { result in
    //do something
}))
alert.addAction(UIAlertAction(title: "확인", style: .default, handler: { result in
    let tf_title = alert.textFields![0] as UITextField
    print(tf_title.text)
}))
alert.addTextField { (textField : UITextField!) -> Void in
    textField.placeholder = "힌트입니다."
}
self.present(alert, animated: true, completion: nil)

마치며

alert은 정말 많이 사용됩니다. 물론 커스텀을 만들어서 사용되기도 하지만 대부분 기본으로 쉽게 사용 할 수 있는 컨트롤러중 하나임은 분명합니다. 여러가지로 신경써야 할 부분도 많이 줄어 들기도 합니다. (ex: 텍스트 필드를 사용 할 경우 키보드에 대한 대응..? ) 오늘 포스팅은 여기까지입니다. 다음 포스팅은 UIAlertController의 또다른 스타일인 actionSheet에 대해서 포스팅 하겠습니다. 틀린점이나 궁금한점이 있으시면 언제든지 댓글을 남겨 주시면 성실히 답변 드리겠습니다.





UIActivityViewController

안녕하세요. 개발자 myoung입니다.
오늘은 UIActivityViewController에 대해서 포스팅 하겠습니다.

UIActivityViewController는 간단하게 이미지, URL, 텍스트등 다른 앱 또는 AirDrop으로 쉽게 공유 할 수 있게 해주는 컨트롤러 입니다.

사용의 예

Alt text

UIActivityCategoryAction (지원하는 액션)

UIActivityTypePrint //프린트
UIActivityTypeCopyToPasteboard //복사하기
UIActivityTypeAssignToContact //전화번호부로
UIActivityTypeSaveToCameraRoll //사진첩으로
UIActivityTypeAddToReadingList
UIActivityTypeAirDrop //에어드랍
UIActivityCategoryShare

UIActivityTypeMessage (지원하는 기본 앱)

UIActivityTypeMail //메일로
UIActivityTypePostToFacebook //페이스북
UIActivityTypePostToTwitter //트위터
UIActivityTypePostToFlickr //플리커 (사진 공유 커뮤니티)
UIActivityTypePostToVimeo //비메오 (비디오)
UIActivityTypePostToTencentWeibo //텐센트웨이보
UIActivityTypePostToWeibo //웨이보 (중국 최대 SNS)

지원하는 데이터 타입

Activity Type String Attributed URL Data Image Asset Other
Post To Facebook
Post To Twitter
Post To Weibo
Message ✓* ✓* ✓* sms:// NSURL
Mail ✓+ ✓+ ✓+
Print ✓+ ✓+ UIPrintPageRenderer, UIPrintFormatter, & UIPrintInfo
Copy To Pasteboard UIColor, NSDictionary
Assign To Contact
Save To Camera Roll
Add To Reading List
Post To Flickr
Post To Vimeo
Post To Tencent Weibo
AirDrop

사용 방법

사용방법은 매우 간단합니다. UIActivityViewController를 정의 해주실때 배열 형식으로 아이템을 만들고 Present 하게 되면 아이템 종류에 따라 지원하는 앱, 지원하는 액션에 자동으로 선택되어서 공유하는 뷰가 밑에서 위로 올라옵니다.

let string: String = "텍스트"
let url: URL = "URL"
let img: UIImage = UIImage(named: "image")

let activityViewController = UIActivityViewController(activityItems: [string, url, img], applicationActivities: nil)
self.present(activityVC, animated: true, completion: { result in
}})

끝마치며

UIActivityViewController를 사용하게 되면 따로 FaceBook, Twitter등 다른 sms 공유가 매우 쉬워집니다. 굳이 SDK를 깔지 않아도 되는 장점이 있습니다. 자유도는 많이 떨어지지만 충분히 다른 앱에 공유하는게 가능해집니다. 좀더 나아가면 커스텀 파일등을 이용해서 백업파일 또는 나의 앱에서만 사용 할 수 있는 파일등을 앱에서 사용할수도 있습니다.

제 포스팅에 틀린점이나 수정해야할 상황이 있다면 언제든지 댓글로 알려주세요. :)



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

iOS) UIAlertController-ActionSheet  (0) 2017.07.26
iOS) UIAlertController - alert  (0) 2017.07.11
iOS)UIActivityViewController  (0) 2017.06.15
iOS) JSON 타입 활용하기  (0) 2017.05.16
iOS) string에서 숫자만 꺼내오기  (0) 2017.05.01
iOS) 키보드 타입  (0) 2017.04.19


Json 타입 활용하기

안녕하세요. 개발자 myoung입니다. 오늘은 JSON에 대해서 포스팅할려고 합니다.
JSON는 간략한 설명입니다.

JSON(제이슨[1], JavaScript Object Notation)은 속성-값 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다. 
비동기 브라우저/서버 통신 (AJAX)을 위해, 넓게는 XML(AJAX가 사용)을 대체하는 주요 데이터 포맷이다. 특히, 인터넷에서 자료를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있다. 
자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수값을 표현하는 데 적합하다.
본래는 자바스크립트 언어로부터 파생되어 자바스크립트의 구문 형식을 따르지만 언어 독립형 데이터 포맷이다. 
즉, 프로그래밍 언어나 플랫폼에 독립적이므로, 구문 분석 및 JSON 데이터 생성을 위한 코드는 C, C++, C#, 자바, 자바스크립트, 펄, 파이썬 등 수많은 프로그래밍 언어에서 쉽게 이용할 수 있다.
JSON 포맷은 본래 더글라스 크록포드가 규정하였다. RFC 7159와 ECMA-404라는 두 개의 경쟁 표준에 의해 기술되고 있다. 
ECMA 표준은 문법만 정의할 정도로 최소한으로만 정의되어 있는 반면 RFC는 시맨틱, 보안적 고려 사항을 일부 제공하기도 한다.
[2] JSON의 공식 인터넷 미디어 타입은 application/json이며, JSON의 파일 확장자는 .json이다.
출처 - 위키피디아

많이 활용 되고 알기 쉽게 데이터를 분류 할 수 있는 강력한 포맷중 하나입니다. Objective-C, Swift 에서는 NSDictionary, Dictionary 형태와 갔다고 보면 될 것 같습니다.

Dictionry타입을 JSON 타입으로 변환하는 코드 입니다.

do {
    let jsonData = try JSONSerialization.data(withJSONObject: your_dictiony, options: .prettyPrinted)
    print(jsonData)
} catch {
    print(error)
}

JSON타입을 String타입으로 변환하는 코드 입니다.

do {
    let convertedString = String(data: you_jsonType, encoding: String.Encoding.utf8)
    print(convertedString!)
} catch {
    print(error)
}

JSON타입을 Dictionary타입으로 변환하는 코드입니다.

do {
    let backup_data = arr_authText?[0].data(using: .utf8)
    let decoded = try JSONSerialization.jsonObject(with: backup_data!, options: [])

    if let dictFromJSON = decoded2 as? [String:Any] {
        //원하는 Dictionary, Array타입으로 캐스팅 하면 됩니다.
        print(dicFromJSON)
    }
} catch {
    print(error)
}

JSON 타입은 서버랑 통신 할때 주로 많이 쓰이는 것 같습니다. Swift 라이브러리로는 “SwiftyJSON”이 있습니다.
간단하게 아니라 주로 사용한다면 라이브러리를 사용하는 것을 권장합니다.(정신건강을 위해서라도요..)

틀린점이 있다면 언제든지 댓글을 달아주세요 :)



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

iOS) UIAlertController - alert  (0) 2017.07.11
iOS)UIActivityViewController  (0) 2017.06.15
iOS) JSON 타입 활용하기  (0) 2017.05.16
iOS) string에서 숫자만 꺼내오기  (0) 2017.05.01
iOS) 키보드 타입  (0) 2017.04.19
iOS) UITextField 간단하게 좌우 여백 주기  (0) 2017.02.20

+ Recent posts