분류 전체보기
-
[iOS] TestFlight에 대한 고찰🍎 iOS/App Store Connect 2023. 2. 9. 16:32
1 Q) 1.3.8 버전으로 빌드를 올리고 있었는데 다른 개발자가 그보다 더 높은 버전으로 빌드를 올렸을 때, 1.3.8 버전으로 이어서 빌드를 업로드할 수 있을까? 1.3.8 버전으로 심사 제출 및 출시도 가능할까? A) 1.3.8 빌드 이어서 올릴 수 있습니다. 1.3.8 버전으로 심사도 넣을 수 있습니다! 2 Q) 테스트플라이트 빌드의 유효기한은 업로드일로부터 90일인데, 이 빌드를 다운받아놨다가 업로드일로부터 90일이 지나 빌드가 무효화되었을 때 기존에 다운받아두었던 빌드를 실행할 수 있을까? A) 올려두었던 빌드 중에 14시간 후에 만료되는 빌드가 있어 이걸 다운받아두고 14시간 후에 다시 앱을 실행시켜보았습니다. ['앱 이름' 베타 만료] 얼럿이 뜨며 앱 실행이 불가했습니다. 깨달으면서 하나..
-
[iOS] Firebase 7.0.0 업데이트 트러블 슈팅🍎 iOS/개발 2023. 2. 9. 10:41
프로젝트에 적용되어 있던 Firebase 라이브러리들을 6버전대에서 7버전대(7.0.0~)로 업데이트하면서 발생한 이슈들에 대한 기록입니다. Error 1 🗒 에러 메세지 Parameter of 'messaging(_:didReceiveRegistrationToken:)' has different optionality than required by protocol 'MessagingDelegate' 🚀 에러 원인 FirebaseMessaging 7.0.0에서 토큰 삭제 문제를 해결하기 위해 옵션이 변경되었습니다. 삭제된 토큰에 대해 이 메서드는 fcmToken값 nil로 호출됩니다. 🚀 해결 방법 BEFORE func messaging(_ messaging: Messaging, didReceiveRegi..
-
[iOS] TestFlight에서 Firebase 디버그 모드 활성화하기 (Feat. DebugView)🍎 iOS/개발 2023. 2. 6. 17:55
앱 사용자의 행동을 파악하고 유입 경로를 확인하는 등 유의미한 로그를 수집하기 위해 Google Analytics를 도입하는 도중에, 원하는 시점에 로깅이 잘 이루어졌는지 DebugView를 이용해 확인해보고 있었습니다. DebugView는 디버그 모드가 활성화된 특정 기기에서 유입되는 이벤트, 파라미터, 유저프로퍼티 등을 실시간으로 확인할 수 있는 도구입니다. Xcode상에서 -FIRDebugEnabled Argument를 지정하면 앱을 빌드한 디바이스에서 어떤 이벤트가 발생하는지 이 DebugView로 맨 위 사진과 같이 쉽게 확인할 수 있습니다. But! Xcode에서 작업하는 앱 개발자라면 이 방법으로도 충분하지만, 다른 QA들도 테스트를 할 수 있도록 TestFlight용 앱으로 빌드하거나 Ad..
-
[Objectivc-C] SHA-256 / AES-256 암호화🍎 iOS/개발 2023. 2. 6. 16:14
민감한 개인정보를 API에 태워 보내야 할 때 주로 클라이언트단에서 암호화 처리를 해서 보내곤 합니다. 본 포스팅에서는 Objective-C로 SHA256과 AES256 암호화를 진행하는 방법을 다룹니다. 📌 SHA-256 SHA는 단방향 암호화 알고리즘이므로 복호화가 불가능하며, 복호화를 하지 않아도 되기 때문에 빠른 속도가 특징입니다. 비밀번호 일치여부 확인 등 데이터의 무결성 검증에 주로 사용됩니다. SHA-256은 어떤 길이의 값을 입력하더라도 256bit의 고정된 크기의 결과값을 반환합니다. 입력값이 조금만 변동되더라도 반환값이 완전히 달라지기 때문에 반환값을 토대로 입력값을 유추하는 것이 거의 불가능하다고 합니다. #import - (NSString*)SHA256Hash:(NSString*)t..
-
[Objective-C] IDFA 수집을 위한 App Tracking Transparency 프레임워크 추가🍎 iOS/개발 2023. 2. 5. 20:13
📌 IDFA IDFA는 Identifier for Advertising의 약자로, Apple에서 사용자 기기에 할당한 임의의 식별자입니다. (Android의 ADID와 의미하는 바가 같은 값입니다.) 광고주는 이를 사용하여 사용자에게 맞춤형 광고를 제공할 수 있습니다. 기존에는 이 IDFA값을 그냥 가져올 수 있었으나, iOS 14+부터는 AppTrackingTransparency 프레임워크를 통해 사용자로부터 추적 권한을 받아와야 IDFA값을 가져올 수 있게 되었습니다. 📌 App Tracking Transparency 프레임워크 추가 ➀ info.plist NSUserTrackingUsageDescription 권한 요청을 설정합니다. ➁ 프로젝트 파일 > General > Frameworks, Li..
-
[Swift] 백준 15649 N과 M (1) (Back Tracking)💻 Algorithm/Swift 2023. 1. 31. 22:50
📌 풀이 💬 Code import Foundation let input = readLine()!.split(separator: " ").map { Int(String($0))! } let n = input[0] let m = input[1] var isUsed = [Bool].init(repeating: false, count: n+1) backTracking(0, []) func backTracking(_ cnt: Int, _ arr: [String]) { if cnt == m { print(arr.joined(separator: " ")) return } for i in 1...n where !isUsed[i] { isUsed[i] = true backTracking(cnt+1, arr+[String..
-
[Swift] 백준 2178 미로 탐색 (Graph Traversal)💻 Algorithm/Swift 2023. 1. 31. 22:48
📌 풀이 💬 Code import Foundation let input = readLine()!.split(separator: " ").map{ Int(String($0))! } let n = input[0] let m = input[1] var graph = [[Int]]() var visited = [[Bool]]() for _ in 0.. Int { var queue = [[Int]]() var minLen = 10000 let dx = [-1, 1, 0, 0] let dy = [0, 0, -1, 1] queue.append([x, y, 1]) visited[x][y] = true while !queue.isEmpty { let now = queue.removeFirst() let len = now..