iOS/iOS Dev

· iOS/iOS Dev
이번에 Xcode15와 iOS17의 정식 버전이 배포가 되었는데요. 바로 Xcode를 최신버전으로 올려서 사용하면 좋지만 현업에서는 그렇게하지 못하는 케이스도 많이 있습니다. 그래서 이런 경우 이전 Xcode버전에 최신버전 iOS의 Device Support파일을 넣어서 개발을 해왔습니다. 이번 Xcode15에서는 이럴때 필요한 iOS17의 Device Support파일을 제공하고 있지 않고 있고, Github에도 올라와 있지 않습니다. 대신 Xcode15에서 iOS17 디버깅을 할 수 있도록 내부 다운로드를 진행한 후 아래 명령어를 터미널에서 실행하면 defaults write com.apple.dt.Xcode DVTEnableCoreDevice enabled 아래처럼 Xcode14에서 CoreDevi..
· iOS/iOS Dev
Public-Key Cryptography 이전 글에서 정리했던 HMAC, Sealed Box암호화는 Sender와 Receiver모두 키를 알고 있는 대칭키를 사용합니다. 대칭키는 대역 외(Out of band)로 전송되어야 하고, 이 작업을 안전하게 수행할 수 없는 경우 공개키 암호화(public-key cryptography)를 사용합니다. 실제로 인터넷에서 일상적으로 사용하는 대부분의 암호화는 공개키 암호화를 사용하고, Xcode가 앱에 서명을 할 때에도 동일합니다. 공개키 암호화는 수학적으로 연결된 두개의 키를 생성합니다. 개인키는 비밀로 유지하고 해당 공개키 Data를 게시합니다. 개인키로 Data 혹은 Data Digest에 서명한 다음 전송합니다. Receiver는 공개키 Data에서 공개..
· iOS/iOS Dev
Hasher와 Cryptographic Hashing Hashable 프로토콜 타입의 객체를 Hasher로 hashing하면 무작위로 생성된 시드를 사용해서 해시값을 생성하여 실행될 때마다 다른 해시값을 생성시켜줍니다. func hashItem(item: String) -> Int { var hasher = Hasher() item.hash(into: &hasher) return hasher.finalize() } // Hashing data let hashValue = hashItem(item: "Hasher로 hash한 Data") // 실행시 마다 다른 해시값 Cryptographic Hashing은 Hasher와 같이 거의 유일한 해시값을 생성하고, 입력값을 조금만 변경해도 해시값이 크게 변합니다..
· iOS/iOS Dev
SSL Pinning(이하 Pinning, 피닝)은? 호스트를 인증서 또는 공개키와 연결하는 프로세스입니다. 호스트의 인증서 또는 공개키를 알고 있으면 해당 호스트에 고정(Pinning)합니다. 즉, 미리 정의된 인증서 또는 공개키 중 하나 또는 몇 개를 제외한 모든 인증서를 거부하도록 앱을 구성합니다. 앱이 서버에 연결할 때마다 서버 인증서를 고정된 인증서 또는 공개키와 비교합니다. 둘이 일치하는 경우에만 앱이 서버를 신뢰하고 연결을 설정합니다. 일반적으로 개발 시 서비스의 인증서 또는 공개키를 추가합니다. 즉, 모바일 앱은 앱 번들 내에 디지털 인증서 또는 공개키를 포함해야 합니다. 공격자가 핀을 오염시킬 수 없기 때문에 이 방법이 선호됩니다. SSL 인증서 Pinning이 필요한 이유? 일반적으로 ..
· iOS/iOS Dev
Xcode 11.4부터 시뮬레이터로 Push Notification을 보낼 수 있습니다. 준비물: apns 파일 아래와 같이 payload 내용이 담긴 apns파일을 준비합니다. 파일이름은 payload.apns 정도로 만들면 됩니다. { "aps" : { "alert" : { "title" : "시뮬레이터로 Push Notification 보내기", "body" : "apns 파일로 간단하게" }, "badge" : 5 } } 커맨드라인 입력 그리고 터미널을 열고, 커맨드라인을 입력하는데 3가지 정보가 필요합니다. 시뮬레이터 타겟 타겟 시뮬레이터에 설치된 앱 BundleID apns 파일 경로 xcrun simctl push (시뮬레이터 타겟) (시뮬레이터에 설치된 앱 BundleID) (apns 파일..
· iOS/iOS Dev
https://developer.apple.com/news/?id=z6fu1dcu List of APIs that require declared reasons now available - Latest News - Apple Developer Apple is committed to protecting user privacy on our platforms. We know that there are a small set of APIs that can be misused to collect data about users’ devices through fingerprinting, which is prohibited by our Developer Program License Agreement. To develope..
· iOS/iOS Dev
CryptoKit Documentation: https://developer.apple.com/documentation/CryptoKit (WWDC19)Cryptography and your apps: https://developer.apple.com/videos/play/wwdc2019/709/ (Cryptography and your apps 세션의 Introducing Apple CryptoKit 파트의 정리) CryptoKit에서 할 수 있는 것 Hash 함수: SHA-256, SHA-384, SHA-512 Symmetric-Key Cryptography Message Authentication Code: HMAC Authenticated Encryption: AES-GCM(Chacha20Poly..
· iOS/iOS Dev
GitHub - uber/RIBs: Uber's cross-platform mobile architecture framework. Uber's cross-platform mobile architecture framework. - GitHub - uber/RIBs: Uber's cross-platform mobile architecture framework. github.com RIBs는 Uber에서 만든 Cross Platform 아키텍쳐입니다. → 도입시 iOS와 Android가 동일한 아키텍쳐를 사용하여 플랫폼간 협업 및 비즈니스 로직 코드를 교차 검증할 수가 있다는 이점이 생깁니다. RIBs는 여러 Riblet(리블렛, 하나의 기능단위. 이하 RIB)으로 구성되며 Router, Interactor,..
· iOS/iOS Dev
(Xcode 15부터는 최소 버전이 iOS12 입니다🤩 개발자의 Inner peace!) 그리고 Xcode의 용량이 대폭 줄어들었습니다! (하지만 시뮬레이터들 미포함 용량입니다) Xcode Download 이제 개발자 사이트에서 Xcode를 다운로드 받을 때, 함께 받을 시뮬레이터를 선택해서 받을 수 있습니다. Code Completion 코드 자동완성이 좀 더 똑똑해졌다고 합니다. 예시로 PlantSummaryRow라는 Swift파일을 생성하고, 해당 파일에서 struct를 작성할 때 파일명을 자동완성에서 추천해줍니다. 일부 completion이 표시되는 방식을 개선. 기본 인수가 있는 함수를 호출할 때, 원하는 매개변수를 정확히 가져오는 것이 불편했던 것이 개선되었습니다. 기본 인수의 가능한 모든 순..
· iOS/iOS Dev
GitHub - layoutBox/FlexLayout: FlexLayout adds a nice Swift interface to the highly optimized facebook/yoga flexbox implementati FlexLayout adds a nice Swift interface to the highly optimized facebook/yoga flexbox implementation. Concise, intuitive & chainable syntax. - GitHub - layoutBox/FlexLayout: FlexLayout adds a ni... github.com FlexLayout은 Facebook에서 만든 Flexbox Layout engine인 Yoga의 기능을 Sw..
· iOS/iOS Dev
Swift Package Manager로 Package 배포하기 개발할 때 유용한 패키지들을 Swift Package Manager, CocoaPods, Carthage를 통해서 Dependancy 세팅을 자주 하는데요. 매번 유용한 라이브러리들을 사용하기만 하면서, 이런 건 어떻게 배포하는 걸까? 싶었는 swifty-cody.tistory.com 앞 포스팅에서 Swift Package Manager로 Package 배포를 해봤는데, 해당 패키지를 CocoaPods으로도 배포하고 싶어서 시도해보고 경험을 공유해봅니다. 1. 일단 아무 폴더에다 들어가서 터미널을 통해 아래 명령어를 써줍니다. pod lib create (패키지명) 2. 그리고 5가지 질문에 자신의 패키지에 맞는 선택을 하면 pod temp..
· iOS/iOS Dev
개발할 때 유용한 패키지들을 Swift Package Manager, CocoaPods, Carthage를 통해서 Dependancy 세팅을 자주 하는데요. 매번 유용한 라이브러리들을 사용하기만 하면서, 이런 건 어떻게 배포하는 걸까? 싶었는데 이번 기회에 알아보게 되었습니다. 생각보다 쉽게 배포가 되었습니다. 1. Github에서 Public Repo 생성 2. 로컬에 클론 받기 3. 터미널에서 클론 받은 경로로 들어가서 아래 명령어 실행 swift package init 실행하고 나면 아래와 같이 파일들이 생깁니다. (LICENSE 파일은 Github에서 생성되어 클론받은 파일) 4. Package.swift, README.md 및 Sources, Tests 작성해 줍니다. 저는 Package.swi..
· iOS/iOS Dev
https://github.com/redxoul/AESwift GitHub - redxoul/AESwift: Data and NSData Extension made for AES encryption/decryption only with Swift. AES-128, AES-192, AES-25 Data and NSData Extension made for AES encryption/decryption only with Swift. AES-128, AES-192, AES-256 encryption/decryption is supported. - GitHub - redxoul/AESwift: Data and NSData Extension mad... github.com Github를 통해서 Swift Pack..
· iOS/iOS Dev
기능을 구현하는 것도 중요하지만, '구현된 기능이 의도한 대로 당연하게 동작하는가?'를 테스트해보는 테스트 코드의 작성도 중요합니다. 배포를 하기 전에 사전에 문제를 발견할 수 있는 좋은 방법이며, 테스트가 용이한 코드를 작성하는 것 자체가 코드의 질을 높여줍니다. Xcode에서는 UnitTest, UITest를 위해 XCTest라는 framework를 제공합니다. XCTest를 작성하는 방법은 다음과 같습니다. (1) XCTestCase를 상속받는 클래스를 만듭니다. (2) setUp 메서드를 override한 후 작성해 주면, 테스트 코드가 동작하기 전에 호출되어 테스트하는데 필요한 리소스들을 미리 세팅해 줄 수 있습니다. (3) test로 시작하는 메서드를 작성하고 테스트 코드를 작성해줍니다. fi..
· iOS/iOS Dev
MVI pattern이 오고 있습니다.(이미 왔나요?) 이번에 다녀온 SyncSwift2022 컨퍼런스에서 MVI 패턴에 대한 언급이 2회 등장했습니다. 두번 모두 SwiftUI에 대한 설명중에 선언적 UI인 SwiftUI에서는 MVVM보다는 MVI패턴이 더 어울린다는 내용이었습니다. 여기서 MVI는 Model, View, Intent를 의미하고, 아래와 같은 단방향 데이터 흐름을 보여주는 패턴입니다. View로부터 사용자가 UI event를 일으키면, 그 action을 받아서 Intent가 Model의 State를 update시키고, 그 update된 Model의 State를 View가 반영해서 사용자에게 보여주는 흐름입니다. (SyncSwift2022에서 문상봉님 세션에서는 Intent역할을 좀더 세..
SwiftyCody
'iOS/iOS Dev' 카테고리의 글 목록