일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 |
27 | 28 | 29 | 30 | 31 |
- SwiftUI
- iOS16
- Notification
- FLUTTER
- Code
- Firebase
- Xcode
- geofencing
- JPA
- error
- MacOS
- github
- IOS
- 개발자
- UIButton
- Swift
- rxswift
- window
- 웹뷰
- Realm
- 이미지
- 한글
- darkmode
- Apple
- Session
- appstore
- Archive
- Git
- shorebird
- mac
- Today
- Total
목록IOS (176)
EEYatHo 앱 깎는 이야기
차이점 NSMutableDictionary 수정, 삭제, 삽입 가능. NSDictionary 수정, 삭제, 삽입 불가능. 그런데 막상 코드를 보면, NSDictionary 에 .setValue(, forKey: ) 함수가 존재한다. 그래서 실제로 해보았는데, 오류가 발생한다. 실행 코드. let d: NSDictionary = NSDictionary(object: "object", forKey: "key" as NSCopying) d.setValue("value", forKey: "key2") 오류. Thread 1: "[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key key2." 반면, NSMuta..
사내에서 AirBridge를 쓰고 있길래 뭐하는 건가..해서 쪼끔 알아보았다. 특정 광고에 대해, 전환률이나 클릭율, 설치율 등 광고의 성과를 분석할 수 있으면 좋을 것이다. 이 성과분석의 핵심은, 광고를 본 사람과 이후 행동을 한 사람이 동일인물인지 판단하는 것. 즉 트래킹이다. 기존에 트래킹은 모바일 앱에서는 ADID, UDID 등 모바일 웹과 PC웹에서는 쿠키, 세션 등 한 플랫폼에서 독립적으로 이루어졌다. 이렇게 파편화된 것을 연결하여 트래킹 및 성과분석 해주는 툴이 에어브릿지다. 이메일이나 전화번호 등 확실한 식별자를 이용하여 매칭하는 시스템과, 확률적으로 매칭하는 시스템을 모두 사용하며, 어뷰징 방지 시스템, 다양한 커스터마이징 등이 가능하다. 데이터 만능 시대에 살다보니 이런 사업도 다 보네..
AppDelegate로 분기한다. deepLink func application(_ application: UIApplication, handleOpen url: URL) -> Bool { ... let deepLinkUrl = url ... } universerLink func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { ... let universalLinkUrl = userActivity.webpageURL ... } push func application(_ a..
나중에 시간 지나서 보면, 잘 할 수 있도록 기록하는 용도. .github/workflows/swift.yml 에 있는 파일로 여러 스크립트나 옵션들 설정 가능. gpg로 필요한 certification 이랑, provision 암호화하고 .github/secrets에 올림. 복호화에 필요한 정보는 깃헙액션 옵션에 secrets에 올림. name: Swift on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: macos-latest # macOS 최신버전이서 빌드한다는 뜻 env: XC_VERSION: ${{ '12.5.1' }} XC_PROJECT: ${{ 'Nemo.xcworkspace' }} X..
swipe back 을 끄고, 키는 것은 interactivePopGestureRecognizer로 한다.navigationController?.interactivePopGestureRecognizer?.isEnabled = true // false 하지만, back을 성공했는지 실패했는지 감지할 때는 한계가 있다.@available(iOS 7.0, *)open var interactivePopGestureRecognizer: UIGestureRecognizer? { get }interactivePopGestureRecognizer는 그저 UIGestureRecognizer이기에, 얘를 아무리 들들 볶아도 화면 전환을 성공했는지 실패했는지는 알 수 없다. * 안되는 방법1 ) target을 이용한 ..

ld: file too small (length=0) file '파일경로' 갑자기 시뻘건 에러가 떴다. 검색했더니 클린 빌드하란다. 했더니 해결되었다. 흠.... 이유는 모르겠다.ㅇㅁㄴㄹ 경로로 나온 파일은 전혀 건들지도 않았는데 갑자기 왜지..? ( macOS 업데이트를 해서? xcode 업데이트를 해서? fetch받은게 이상하게 꼬여서? 흠.. 😟 )
프로토콜이란? 특정 역할을 하기 위한, 메소드, 프로퍼티, 기타 요구사항 등의 청사진. 프로토콜은 정의를 제시하지 기능 구현은 안함. (추상의 클래스 역할) 프로토콜의 장점 2015년 9월, WWDC에서 스위프트 버전 2.0을 발표하면서, 스위프트는 프로토콜 지향 언어(Protocol-Oriented Language) 라 칭함 레퍼런스 시멘틱스(class)는 추적에 많은 비용이 들어감. => 프로토콜을 이용하면 값 시멘틱스(struct)로 캡슐화, 추상화를 할 수 있다. 프로토콜 익스텐션의 초기구현을 사용하여 재사용성도 챙길 수 있다. 테스트시, Mocking 을 쉽게 할 수 있다. ( 테스트할 모듈은 구현체로, 다른 모듈은 Protocol을 채택하고 테스트 결과를 확인할 수 있는 Mock 으로 사용. ..
1. defer 함수안에 defer을 작성한다. 함수를 종료할 때, 가장 마지막에 수행할 명령들을 담을 수 있다. defer로 묶인 코드는, 그 위치가 어디에 있던 함수 마지막에 실행된다. 함수 내부에서 파일을 열었을 때, 종료 전에 닫는 작업을 하는 등. C++에서 메모리 해제하는 느낌으로 사용하면 좋다. 다만, defer은 함수가 종료될 때 실행된다. 그런데 guard에 의해서 함수가 종료될 때는 실행이 안된다 ㅡㅡ; func priority(index: Int) { guard index > 0 else { print("index is lower than zero.") return } print("function work fine :)") defer { print("I am defer code") }..