일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Apple Developer Academy
- Coding Test
- SwiftUI
- WWDC22
- widgetkit
- backend
- 코테
- Delegate Pattern
- UIStackView
- UIDatePicker
- Sendbird
- UITableView
- coreml
- createml
- fcm
- Tuist
- Firebase
- ios
- cloud functions
- task.yield()
- tabman
- github
- watchkit
- Flutter
- Swift
- spring
- swift concurrency
- app intents
- Project
- Complication
- Today
- Total
목록2024/11 (67)
azhy의 iOS 이야기
2022년 6월 18일에 작성됨 API Key를 숨기지 않고 깃허브에 그대로 올리면 다른 사람들도 API key를 볼 수 있어서 되돌릴 수 없는 일들이 벌어질 수도 있습니다. AWS 해킹당한 경험담 실제로 GitHub에 Key를 숨기지 않고 올려서 150만 원 정도 청구된 사례도 있죠. 지금 OpenWeatherMap API 를 이용해서 간단한 작업을 하고 있는데, 이 API를 사용하려면 API Key 가 필요했고 Key를 숨기는 작업이 필요해서 정리해보려 합니다.API Key 숨기기1. New File -> Property List 2. 생성된 파일에 String Type을 가진 key를 하나 만드시고 Value에 실제 Key 값이 아닌 임시로 아무 string 값을 넣어줍니다. 사실 2번에서 실제 ..
2022년 6월 17일에 작성됨 StackView는 UI를 그릴 때 상당히 많이 이용하는 것 같습니다. 개인적인 생각이지만 StackView 만 잘 써도 기본 UI 틀은 다 만들 수 있는 것 같네요.. 이 유용한 StackView의 기본에 대해 정리해보려 합니다. StackView의 기본 속성은 axis, distribution, alignment, spacing 4가지가 있다.AxisDistribution (axis 방향)Fill (default) Fill 속성은 현재 기준 방향으로 요소들을 채운다. 만약 너비의 합이 스택 뷰의 너비보다 크거나 작다면 뷰들의 최소, 최대 크기에 대한 우선순위에 따라 크기를 줄이거나 확장시킵니다.compression resistance priority: 최소 크기에 대한..
2022년 6월 5일에 작성됨 UITextField를 쓰다 보니 글자 수를 제한해야 하는 경우가 생겼는데 그 방법을 한번 정리해보려 합니다. UITextField 세팅우선 테스트를 위해 view 가운데에 UITextField 하나를 올려두었습니다.class SettingViewController: UIViewController { let textField: UITextField = { let textField = UITextField() textField.translatesAutoresizingMaskIntoConstraints = false textField.layer.cornerRadius = 4 textField.layer.borderWidth..
2022년 6월 1일에 작성됨 요즘 Flutter 보다 iOS에 집중하고 있어서 Flutter에는 손이 잘 안 가지만 예전에 작업했을 때 Performance View를 사용했던 경험을 까먹을까 봐 기록하려 합니다. 만약 어떤 앱을 다운로드하였는데 버벅거리고 끊기면 누구라도 그 앱을 사용하기 싫어질 것이고, 평가도 좋지 못할 것이다.사람마다 취향이 다르고 관점도 다르기 때문에 누구한테는 좋은 앱, 누구한테는 좋지 못한 앱이 될 수 있다.하지만 앞에서 말한 것처럼 앱 퍼포먼스가 떨어진다면 사용해서 판단하기 전에 삭제할 가능성이 높기에 우리는 어떤 앱을 만들던 앱 퍼포먼스를 확인해서 완성도를 높여야 할 필요가 있다.Using the Performance ViewFlutter에서는 앱을 실시간으로 모니터링해 ..
2022년 5월 15일에 작성됨 며칠 전에 앱을 출시하고 앱 정보를 확인해 보니 언어가 EN 영어로 되어있었다. 분명 나는 출시할 때 지역을 한국으로 설정했는데 왜..?라고 생각을 하고 구글링을 했습니다. 결론은 앱 스토어의 언어로 표시되는 정보는 프로젝트의 Development Region 따른다고 합니다.Info.plist에서 Localization native development region을 Korea로 변경프로젝트이름.xcodeproj/project.pbxproj 파일을 다른 에디터(저는 vs로 작업했습니다)를 이용해서 열고 developmentRegion = ko;로 바꾸고 밑에 knownRegions 에도 en -> ko로 변경 이렇게 변경하고 출시를 하면 앱의 언어가 한국으로 뜨는 것을 ..
2022년 5월 12일에 작성됨 인생 첫 앱을 출시하며 있었던 이야기를 기록으로 남겨보려 합니다.규칙모바일 개발은 Flutter로 먼저 입문했었습니다.하지만 iOS에 더 관심이 있었고 최종적으로는 취업도 iOS로 하려 했기에 iOS에 조금 더 집중하기로 결정을 했습니다.프로젝트는 저 포함 2명이서 진행하였고 몇 개의 규칙을 정해 기획을 진행했습니다.유저정보를 최대한 묻지 않는 로그인, 회원가입유저 간 상호작용하는 기능들 배제복잡하지 않은 UI, UX디자인은 최대한 해치지 않게 제작이제 막 swift 기초 문법을 공부하고 바로 프로젝트를 진행했기에 리스크를 최대한 줄이려고 이렇게 규칙을 정했습니다.실제로 그때 당시 작성했던 노타빌리티 메모인데, 이렇게 보니 조금 부끄럽네요.. ㅋㅋㅋㅋㅋ기획앞에 작성한 규칙..
2022년 5월 6일에 작성됨 기본 입력받기// return Stringvar input = readLine()!// return Intvar input = Int(readLine()!)!"1 2 3 4 5"와 같은 공백 있는 숫자 입력받기// split - return: [SubString] var nums = readLine()!.split(separator: " ").map {Int($0)!} // components - return: [String] -> import Foundation 필수var nums = readLine()!.components(separatedBy: " ").map {Int($0)!}// FileIO, 입력받으면서 리스트에 바로 추가하기array.append((file.re..
2022년 5월 3일에 작성됨 우리는 보통 GCD, Dispatch Queue를 구분하지 않고 부릅니다.요번에 정리하며 알게 됐는데 공식문서를 보면 GCD는 동시성 실행을 제공하는 프로그래밍 언어 요소, 런타임 라이브러리 등이라고 합니다. 그래서 따지고 보면 GCD랑 Dispatch Queue는 같지는 않지만 GCD의 개념으로 동시성 프로그래밍을 지원하는 친구가 Dispatch Queue라서 같은 의미로 봐도 무방할 것 같습니다. 다른 언어와 달리 iOS 는 Dispatch Queue에 작업을 넣으면 운영체제가 알아서 스레드에 할당해 주는 특징이 있습니다.Serial, ConcurrentDispatch Queue에는 2가지 종류가 있는데 Serial과 Concurrent가 있습니다. Serial등록된 ..
2022년 4월 25일에 작성됨 현재 진행 중인 프로젝트에서 지정된 시간에 알림을 보내야 하는 기능이 필요했습니다.그래서 지정된 시간에 함수를 실행할 수 있도록 예약 함수를 지원하는 cloud function을 사용했고 그 내용을 정리하려 합니다. 자세한 내용은 공식문서 를 참고해 주세요.Firebase, cloud Functions 세팅프로젝트에서 cloud functions을 사용하려면 firebase, functions 세팅이 필요합니다.[Firebase] Cloud Functions 세팅 글을 참고하거나 구글링을 통해 세팅을 완료하고 다음으로 넘어가주세요.함수 작성코드는 공식문서 참고했습니다.exports.scheduledFunction = functions.pubsub.schedule('ever..
2022년 4월 19일에 작성됨CocoaPods 이용해서 TabMan 설치pod 'Tabman', '~> 2.12'Set & Use설치가 완료되었다면 ViewController를 생성해서 다음과 같이 세팅을 해주세요.import Tabmanimport Pageboyclass TabViewController: TabmanViewController { private var viewControllers = Array = [] override func viewDidLoad() { super.viewDidLoad() // tab에 보여질 VC 추가 if let firstVC = storyboard?.instantiateViewController(withIdentif..