1. guard let url = URL(string: baseURL + "/home") else { throw APIError.invalidEndpoint } var request = URLRequest(url: url, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = HTTPType.post.rawValue request.allHTTPHeaderFields = headers GET 파라미터 넣을때는?? URLComponent로 첨부터 만들었어야 한다...
developers.kakao.com/docs/latest/ko/kakaologin/ios * 간편 로그인 버튼은 크기, 영문/한글 선택해서 psd랑 png로 뽑을 수 있는데 1x~3x 사이즈로는 제공이 안된다. 디자이너분께 말씀드려서 iOS 에셋 크기로 맞춰달라고 해야 할 것 같다.... -> 수정) iOS SDK 안에 있을것같다... ** 앱 등록을 하고 NATIVE_APP_KEY를 전달 받아야한다. 외주회사에서 미리 받자! 1. pod으로 SDK 설치 target '' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! # 카카오 pod 'KakaoSDKCommon' # 필수 요소를 담은 공통 모..
오랜만에 iOS외주를 하게 됐는데, 이런식으로 겹치는 원형 이미지가 필요한 부분이 있었다. 이런식으로 stackView에 넣어서 distribution을 fill equally로 하고, spacing을 음수로 줘서 해결할 수 있어서 간단할거라고 생각했는데 저 이미지를 렌더링 하는 부분에서 UIImage 형태로만 원해서 아예 Image를 편집해서 넣어야 하게 되었다. 그래서 이 글 을 참조해서 아예 코드를 새로 짜게 되었다. let bottomImage = UIImage(systemName: "folder.circle.fill") let topImage = UIImage(systemName: "doc.circle.fill") // 새로운 이미지의 사이즈 let size = CGSize(width: 35, ..
나의 stackview에 코드로 NSTextField를 만들어서 하나씩 addSubview 해줬는데... 안보여서 로그 찍어보니 0 0 으로 설정되어 있었다. 왜...? 나의 stackview는 fill equally 속성인데 대체 왜;;;; 그래서 해본 시도 1. 코드로 stackView.translatesAutoresizingMaskIntoConstraints = false 로 지정해준다. translatesAutoresizingMaskIntoConstraints 은 Auto resizing mask를 constraints로 바꾸는걸 동의하는지 묻는 것이다. When this property is set to true, the view’s superview looks at the view’s auto..
func textView(_ textView: UITextView, shouldInteractWith textAttachment: NSTextAttachment, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool 개신기.... ⭐️ textview가 isSelectable = true여야 쓸 수 있다 ⭐️
안드로이드 같은 경우에는 파일과 사진 picker가 통일된 것으로 알고 있다. 하지만 iOS에서는 파일 선택과 사진 선택은 다르게 이루어지므로 2가지를 따로 구현해주어야 한다. 파일 첨부이다. 파일 첨부를 위해서는 UIDocumentPickerViewController를 이용해야 한다. ( UIDocumentMenuViewController와 같은 경우는 deprecated 되었다. ) documentTypes를 유의해서 봐야 하는데, 저렇게 써주면 PDF인 파일들만 선택 가능하게 된다. 모든 파일을 다 선택하려면 UIDocumentPickerViewController(documentTypes: ["public.item"], in: .import) document type을 "public.item"으로 ..
카카오톡을 보면, 첨부파일을 다운로드 할 때 docx나 pdf같은 형식은 바로 preview가 보이는데, 한글 파일은 preview가 보이지 않고 파일 공유 화면으로 연결이 되었다. 이런 기능을 어떻게 구현했는지 궁금해져서 다음과 같이 정리해본다. 카카오톡에 테스트 해본 파일들. 깨진 pdf, 정상적인 pdf, hwp, docx로 테스트 해보았다. 카카오톡은 hwp 파일과 같은 경우 다음과 같이 half- modal로 present 되었다. docx, pdf는 preview로 보여진다. 깨지는 Pdf 파일은 preview 이긴 한데, 내용은 안보인다. 나도 그래서 구현해봤다!! 변수를 선언해주고, var viewer: UIDocumentInteractionController? viewDidLoad에서 초..
stackoverflow.com/questions/51158390/custom-uibutton-class-for-button-touch-event Custom UIButton class for button touch event Is it possible to create a custom UIButton class with an touch event animation which gets automatically invoked everytime the user touches the button? import UIKit class AnimatedButton: UIButto... stackoverflow.com 나에게는 모두 똑같은 액션을 하는 IBAction 함수와 그에 달린 버튼이 있었다. 이 IBActio..
앱에는 JWT를 처음 적용해봤다. jwt는 json web token의 줄임말이다. velopert.com/2389 여기에 jwt 자체에 대한 설명이 자세하게 나와있다. 로그인 성공시 오는 헤더 값들이다. 이중에 Authorization과 RefreshToken을 봐야 한다 !!! 둘다 JWT로 암호화 되어 있는데, 얘를 JWTDecode라는 pod을 써서 decode 시켰다. Authorization을 decode 시킨 결과이다. 여기서 login_id, year같이 앞으로 계속 필요한 데이터를 UserDefaults에 저장 해줬다. decode시키기 전의 Authorization 값 자체가 access token이 되므로, 그 값도 UserDefaults에 저장해준다. 다음은 RefreshToken인..
iOS10 이전에는 푸시는 서버에서 오는 메세지를 바꿀 수 없었다. 무조건 오는 그대로! 보여줬어야 했다. 하지만 iOS10부터, (silent notification이 아닌 경우에 한하여) UNNotificationServiceExtension을 만들어서 push notification의 내용을 변경하는것이 가능해졌다. 먼저, 서버에서 푸시를 보낼 때 내용에 mutable-content: 1을 꼭 써줘야 한다. 이걸 써줘야 UNNotificationServiceExtension이 콜 되기 때문! 이 extension은 Xcode에서 아예 다른 타겟으로 분리해서 만들어야 하고 (delegate가 아니라 아예 App Extenstion으로 분리되어있기 때문이다), NotificationService cla..
문서를 확인하니, 서버에서 이런 형식으로 push를 보내고 있으니 알아서 까서 앱에서 보여주라는 문서가 있었다. 이런 형식의 push를 앱에서 처리하려면 어떻게 해야할까?? 사실 나는 firebase를 통해서 푸시 연결만 해보고, 직접 json을 까서 푸시를 만들어서 띄워주는 일은 아예 처음이었다. 일단 저런 형식은 파싱할 수 없다. 저거는 안드로이드 형식이고, ios 형식은 또 다르다. iOS에서는 다음과 같은 형식으로 보내줘야 한다. (출처: hyongdoc.tistory.com/368) developer.apple.com/documentation/usernotifications/unnotificationserviceextension
Alamofire을 이용해서 이미지를 서버에 업로드 하는데, 다음과 같은 경고가 뜨면서 이미지 업로드가 안되는 문제가 발생했다. "no such file"....!!!! 분명히 사진 url을 받아와서 그대로 넘겨줬는데 왜 안될까??? 스택오버플로우를 찾아보니 다음과 같은 이야기가 있었다. Container locations change periodically therefore never save full paths pointing to the application container to UserDefaults. Save only the file names and get the URL to the current document directory always with let documentsFolderURL..
class CommentTableViewCell: UITableViewCell { @IBOutlet var senderLabel: UILabel! @IBOutlet var timeLabel: UILabel! @IBOutlet var bodyLabel: UILabel! override func awakeFromNib() { super.awakeFromNib() // Initialization code let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(longPressed)) self.contentView.addGestureRecognizer(longPressRecognizer) } @objc func ..
2020-03-28 12:34:56 다음과 같은 형태로 바꿔야 한다면? func toPrettyDate() -> String? { // 들어오는 타입 let dateFormatterGet = DateFormatter() dateFormatterGet.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" // 나가는 타입 let dateFormatterPrint = DateFormatter() dateFormatterPrint.dateFormat = "yyyy-MM-dd HH:mm:ss" if let date = dateFormatterGet.date(from: self) { return dateFormatterPrint.string(from: date) } else { retur..
Option + Cmd + 좌/우 화살표
UIImage(systemName: "")
매우 오래전부터 궁금했던 질문... 이런식으로 여러개중에 하나만 해당될 때, 코드를 예쁘게 짜고싶다면?????/ stackoverflow.com/questions/51673321/swift-if-statement-with-a-equals-to-b-or-c Swift: 'if' statement with a equals to b or c If I want to make sure that variable A is equal to B or C in Swift, I would normally write something like: if a == b || a == c { //Do Something } However, I wonder if there is a shorthand vers... stackoverflow..
viewDidLoad에서 delegate설정 /// textview 설정 commentTextView.delegate = self commentTextView.text = "댓글 내용 입력" commentTextView.textColor = UIColor.darkGray extension 써주기 extension CreatePostingViewController: UITextViewDelegate { func textViewDidBeginEditing(_ textView: UITextView) { if textView.textColor == UIColor.lightGray { textView.text = nil textView.textColor = UIColor.black } } func textView..
양쪽에 모두 space가 있어야된다.......!!!!!!!!! 참고로 ... 은 closedRange이고 ~= 을 써서 범위 내에 있는지 확인 가능하다. 2...10 ~= len($0) 하면 $0이 2부터 10 사이에 있는지 알 수 있다. openRange로 하려면 ..< 을 써야한다!!! 그 외의 방법들: www.hackingwithswift.com/articles/90/how-to-check-whether-a-value-is-inside-a-range
앱에서 JWT토큰을 처음 적용해봐서 여러가지 삽질을 했다... stackoverrun.com/ko/q/11263927 json - Swift에서 JWT (Java Web Toolkit) 토큰을 어떻게 디코딩 할 수 있습니까? 나는이 { "부"와 같은 페이로드를 얻을 수 있도록 가 어떻게이를 디코딩 할 수있는이 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONF stackoverrun.com 라이브러리를 쓰면 훨씬 편하다 :D
장점 : 앱을 끄면 삭제되는 AppDelegate 변수들과는 달리, 앱을 삭제하기 전까지는 반영구적으로 저장된다. 내부적으로는 plist 파일을 통해서 저장한다. 기본 자료형까지 바로 사용이 가능하다. [사용법] - 저장할 때 UserDefaults.standard.setValue(id, forKey: "id") - 받아올 때 // String UserDefaults.standard.string(forKey: "") // Bool UserDefaults.standard.bool(forKey: "") // Double UserDefaults.standard.double(forKey: "") // 배열 UserDefaults.standard.object(forKey: "") as? [String] 이런식으로..
첨에는 태그로 처리하려고 이리 저리 옮겨봤었는데, 결론은 callback으로 처리하는게 좋다!! 버튼을 눌렀을 때 콜백을 실행해주는 정도로 해주면 될 것 같다 class LockerMyTableViewCell: UITableViewCell { @IBOutlet var registerButton: UIButton! @IBAction func didTapRegisterButton(_ sender: Any) { tapCallback?() } } 이렇게 클래스 내에 선언해주고, func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { cell.tapCallback = { let alert = UI..