일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 개발자
- androidstudio
- kotlin
- Python
- ui
- TableView
- modal
- PyQt5
- library
- Chart
- ios
- graph
- 라이브러리
- 개발
- Swift
- UIKit
- Android
- 그래프
- UITableView
- cocoapods
- UIButton
- Storyboard
- charts
- PyQt
- Xcode
- 어플리케이션
- alamofire
- Chrats
- button
- Apple
- Today
- Total
목록전체 글 (276)
Jiwift
[iOS/Swift] 앱 스토어, 테스트플라이트 여러 개의 버전을 동시에 심사할 때 조심할 점 안녕하세요. 이번에는 필수적으로 알아갈 필요는 없지만 제가 겪은 일을 공유하려고 합니다. 우선 상황을 설명시켜 드리도록 하겠습니다. 저는 앱을 각각 3개의 버전을 준비하고 빌드와 제출 정보는 위와 같이 진행하였습니다. 하지만 애플 심사 과정에서 '2.0.1', '3.0.1'의 테스트 서버 ID가 로그인이 되지 않는다고 심사 반려를 당하였습니다. 처음에는 내가 빌드를 실수한 건가 생각하고 다시 빌드를 진행하고 깃에 태그도 남기고 브랜치도 따로 옮겨서 해당 빌드를 완전하게 기록했습니다. 그런데 다시 제출한 버전의 앱도 로그인이 되지 않는다고 합니다. 제 앱은 PROD, QA, DEV 이렇게 나누어진 상태인데,,, ..
[iOS/Swift] 앱 스토어, 테스트플라이트 여러 개의 버전을 동시에 심사 제목은 위와 같이 적어 두었지만 상황을 다시 설명하자면.. 앱 스토어에 정식 버전을 제출한 상태에서 외부 테스트플라이트를 사용하기 위해 다른 버전들도 심사를 태워도 되는가?입니다. ChatGPT에게 물어본 결과 앱 스토어 심사와 테스트플라이트 심사는 따로 진행되는 것이라고 합니다. 그리고 이렇게 하시는 분들도 있다고 하여 저도 테스트를 해보았습니다. 위 사진과 같이 동시에 준비를 하였습니다. 동시에 제출 가능하다! 앱 스토어 심사는 제출을 완료하는 순간 '심사 대기 중'으로 변경되고 테스트플라이트는 외부 그룹에 넣는 순간 '심사 대기 중'으로 변경됩니다. 이로서 동시에 모두가 가능하다는 것도 알 수 있습니다. (안되면 이미 기..
아는 게 없어서 찾아본 내용을 정리하기 위해 작성합니다. 틀리거나, 새로 추가해야 할 내용이 있으면 댓글로 알려주시면 감사하겠습니다. 2023년 12월 25일 기준 글입니다. 현재 라이브러리들을 찾아보면 Privacy Manifest가 적용되어 있는 라이브러리들이 있습니다. 위와 같이 발빠르게 적용해 준 라이브러리들이 있습니다. 하지만 깃 커밋을 보고 제대로 되어있다고 방심하면 안 됩니다. 우선 제대로 적용이 되고있는지 확인하는 방법을 알아봅시다... 1. 프로젝트에 라이브러리를 설치하고 Archive 한다. 2. Organizer 화면에서 방금 Archive 한 빌드를 우클릭한다. 3. Privacy Report를 확인해 본다. MarqueeLabel 라이브러리 같은 경우는 깃에 커밋을 보고 설치를 했..
아는 게 없어서 찾아본 내용을 정리하기 위해 작성합니다. 틀리거나, 새로 추가해야 할 내용이 있으면 댓글로 알려주시면 감사하겠습니다. 2023년 12월 24일 기준 글입니다. Upcoming third-party SDK requirements - Support - Apple Developer Upcoming third-party SDK requirements - Support - Apple Developer Feedback Assistant Submit feedback, report bugs, and request enhancements to APIs and developer tools. Send us feedback developer.apple.com Privacy Manifest와 함께 서명을 추가해..
아는 게 없어서 찾아본 내용을 정리하기 위해 작성합니다. 틀리거나, 새로 추가해야 할 내용이 있으면 댓글로 알려주시면 감사하겠습니다. 2023년 12월 24일 기준 글입니다. [iOS/Swift] Privacy Manifest Describing use of required reason API Describing use of required reason API | Apple Developer Documentation Describing use of required reason API | Apple Developer Documentation Ensure your use of covered API is consistent with policy. developer.apple.com 이것은 무엇인가.. Priv..
아는 게 없어서 찾아본 내용을 정리하기 위해 작성합니다. 틀리거나, 새로 추가해야 할 내용이 있으면 댓글로 알려주시면 감사하겠습니다. 2023년 12월 24일 기준 글입니다. Alamofire 깃 허브 이슈를 보던 중에 Privacy Manifest라는 것을 보았다.. 이게 뭘까 뭔지 몰라도 귀찮고 어떻게 보면 큰 일일수도 있을 것 같은 녀석이다.. Get started with privacy manifests - WWDC23 - Videos - Apple Developer Get started with privacy manifests - WWDC23 - Videos - Apple Developer Meet privacy manifests: a new tool that helps you accuratel..
iOS 16.4 이상 부터는 WebKit에서 로그를 확인하려면 옵션을 변경해야합니다. if #available(iOS 16.4, *) { self.webkit.isInspectable = true } 원하는 웹킷에 해당 코드를 적용하면 Safari를 통한 로그 확인이 가능해집니다.
iOS 프로젝트를 개발하면서 웹킷에서 정적웹이라도 보여야하는 경우가 있습니다. 상황마다 다를 수 있겠지만.. 쉽게 말하면 웹 서버 없이 HTML 파일을 가지고 웹킷에서 바로 사용 가능한 경우에 쓰입니다. 우선 웹을 띄운다는 소리는 웹의 구성 파일들이 있을 것입니다. 저는 web이라는 폴더 안에 폰트, 이미지, index 등을 넣어두었습니다. 이제 이 폴더를 iOS 프로젝트로 옮겨야합니다. - Copy items if needed - Create folder references ("Create groups"는 하면 안됩니다.) - Add to targets 위의 옵션으로 폴더를 가지고 옵니다. . └── TestEx/ └── TestEx/ ├── web/ │ ├── index.html │ ├── imag..
UITextField의 글자수를 제한하고 개수를 표시하기 위한 로직 작성 20 자리를 기준으로 작성한 코드 self.nameTextField.delegate = self 글자수를 세기 위한 Textfield의 delegate를 설정 extension ViewController: UITextFieldDelegate { func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { // 기존 글씨 + 입력된 글씨 = text길이 guard let text = textField.text else { return false } let newLength..
이번에는 코드를 이용해서 UIButton을 만들어 보도록 하겠습니다. 사실 매우 간단하지만, 처음에는 왜 사용하는지 모를 수도 있을 것 같긴 합니다. 제가 사용하는 이유는 버튼 색상, 폰트와 같이 공통적으로 많이 사용되는 버튼을 Class로 만들어서 관리하고 있습니다. 이렇게 Class로 버튼을 만들면 변경이 생길 경우 유지보수하는데 좋다는 점이 있습니다. 예시는 많은 내용을 담지는 않겠습니다. 기본적인 방법을 익히시고 프로젝트에 맞는 버튼을 만들어보세요. // 버튼 class PrimaryButton: UIButton { // 코드를 통해 인스턴스를 생성할 때 사용되는 이니셜라이저 override init(frame: CGRect) { super.init(frame: frame) self.commonI..
이번에는 iOS에서 주소 검색 기능을 구현하도록 하겠습니다. 무료 사용을 위해서 다음(카카오)에서 제공해 주는 API를 사용하도록 하겠습니다. [Open API] 카카오(다음) 주소 검색 API 사용 (tistory.com) [Open API] 카카오(다음) 주소 검색 API 사용 서비스에서 주소 검색이 필요한 경우에 사용하기 좋은 무료 API를 소개합니다. 다음에서 제공해 주는 API를 사용하면 쉽게 웹과 앱에서 주소 검색 기능을 구현할 수 있습니다. Key를 발급받을 필요 jiwift.tistory.com 우선 위에 글을 통해서 다음 주소 검색 API를 사용하기 위한 웹을 준비합니다. 위 글에는 iOS에서 사용하기 위한 다음 주소 검색 웹 코드와 적용법이 있습니다. // 네이티브 앱 코드 호출 let..
해당글은 iOS를 위한 글입니다. 서비스에서 주소 검색이 필요한 경우에 사용하기 좋은 무료 API를 소개합니다. 다음에서 제공해 주는 API를 사용하면 쉽게 웹과 앱에서 주소 검색 기능을 구현할 수 있습니다. Key를 발급받을 필요가 없습니다. 사용량에 대한 제한이 없습니다. 기업용이든 상업적 용도이든 상관없이 무료로 사용 가능합니다. 기초구역번호가 발급된 도로명 주소, 영문 주소를 확인 가능합니다. 행정안전부에서 제공하는 "도로명 주소" DB를 직접 업데이트받고 있으므로 가장 최신의 데이터를 이용하실 수 있습니다. 위에 설명만 봐도 너무나도 좋은 API란 것을 알 수 있습니다. 로고를 가리지 않고 사용한다면 문제가 생기지 않는다고 합니다. Daum Postcode Service User Guide Da..
개발자를 하면 야근이 많을까요? 아닐까요? 궁금해하시는 분들이 많습니다. 하지만 정답이 있는 것이 아니기 때문에 너무 많은 상황에 따라서 다를 것 같습니다. 하지만 "개발자"라고 야근이 많은 것은 아닙니다. 한 줄 요약을 먼저 하고 시작하자면,,, 상황, 인원, 프로젝트에 따라 너무 다름으로 회사의 전체적인 모습을 보고 방향을 정하자 정말 정말 개인적인 생각입니다. 정답도 아니고 각자 경험한 직장이 다르니 재미로 봐주세요. 개발자는 매일 문제를 풀어가는 직업입니다. 경력이 쌓이고 계속 공부를 한다면 해결 능력이 빨라지고 업무 효율이 늘어나 속도는 빨라지게 됩니다. 하지만 속도가 빨라진 만큼 새로운 문제들은 계속 들어옵니다. 단순하게 암기 정리만 하고 끝내는 게 아닌 수학 문제를 계속 푼다고 생각해야 합니..
트레일러 공개 한국 시간 2023년 12월 5일 오후 11시 GTA5가 출시되고 벌써 10년이 지났습니다. 그 사이에 레드데드리뎀션 2도 나오고 콘솔은 벌써 XboxOne, XboxOne X, Xbox Series X 등 많은 발전을 이루었습니다. 많은 사람들이 다음 작은 언제 나오는지 기다리고 있는 와중에 2022년 개발 단계 사진과 영상 유출 사건과 함께 GTA6 개발이 되고 있다고 공식화가 되었습니다. 락스타가 트위터에 글을 올리고 벌써 1년이 좀 더 지난 시점에 트레일러 공개를 발표하였고 사람들은 많은 기대감을 품고 트레일러가 나오기만을 기다리고 있습니다. 최근 수많은 AAA 타이틀들이 출시하고 많은 버그와 유저들의 기대감을 채워주지 못하고 금방 인기가 사그러지는 일이 많았습니다. 과연 락스타는 ..
급하게 작성하는 글... 불과 몇 시간 전에 [iOS/Swift] 색상 정의하고 관리하기 Assets, Enum, Extension (tistory.com) [iOS/Swift] 색상 정의하고 관리하기 Assets, Enum, Extension 앱 개발을 하다 보면 색상을 매번 적용할 수 없기 때문에 정의를 해서 사용하는 게 좋습니다. 제일 기본적인 방법으로는 다양하게 있습니다. 코드로 할 수 있고, Asset을 통해서도 가능합니다. 한 jiwift.tistory.com 위 글에서는 애셋과 extension을 통해서 UIColor를 다루는 방법을 소개했었습니다. 근데 작성하면서 새로운 기능을 알게 되었습니다. (기존 방법이 궁금하신 분들은 위 글을 참고해 주세요.) 위 코드를 보시면 저는 애셋에 맞게 변..
[iOS/Swift] Xcode 15 신기능 Assets 바로 사용하기 이미지, 색상 정의 (tistory.com) [iOS/Swift] Xcode 15 신기능 Assets 바로 사용하기 이미지, 색상 정의 급하게 작성하는 글... 불과 몇 시간 전에 [iOS/Swift] 색상 정의하고 관리하기 Assets, Enum, Extension (tistory.com) [iOS/Swift] 색상 정의하고 관리하기 Assets, Enum, Extension 앱 개발을 하다 보면 색상을 매번 적 jiwift.tistory.com Xcode 15 이상 버전을 사용하시는 분들은 최신 기능을 사용해보세요. 위에 글에서 정리되어있습니다.!! 기존에 방법이 궁금하신 분들은 아래 내용을 끝가지 읽어주세요.!! 앱 개발을 하다..
스냅킷에서는 중앙을 쉴게 잡아주는 기능이 있습니다. centerY make.centerY.equalToSuperview() Y축을 기준으로 중앙에 위치하게 합니다. centerX make.centerX.equalToSuperview() X축을 기준으로 중앙에 위치하게 합니다. center make.center.equalToSuperview() make.centerX.centerY.equalToSuperview() X축과 Y축을 동시에 중앙에 위치하게 하는 방법입니다. equalTo()와 응용 make.centerX.equalTo(self.myView) 원하는 대상을 지정해 주면 대상을 기준으로 중앙에 위치하게 됩니다. 알면 알수록 재미있는 스냅킷입니다.
snapkit에서는 inset과 offset이 있습니다. 둘은 비슷하면서도 많이 헷갈리기도 합니다. 저는 offset을 자주 사용하고 있긴 한데 둘의 차이점은 적용 대상의 안을 기준으로 하느냐 바깥을 기준으로 하느냐의 따라서 양수와 음수가 달라집니다. 사실 사용하다 보면서 그냥 익혀가는 게 더 빠르긴 합니다. // UI private func setUI() { // 슈퍼 View에 파랑색 View 추가 self.view.addSubview(self.myView) self.view.addSubview(self.secondView) // SnapKit 적용 self.myView.snp.makeConstraints { make in make.top.equalToSuperview() make.leading.eq..
연봉 1억 보장→3500만원… ‘개발자 우대’ 옛말 된 까닭 (chosun.com) 그냥 평소에 생각하고 있던 개발자 취업 느낌? 경험을 작성해보려고 한다. 모두가 알고 있는 이야기일 수도 있고 어떤 누군가는 공감을 못할 수 있는 지극히 개인적인 생각이다. 이 글을 작성하는 나도 대단한 사람도 아니다. 그냥 소기업 다니는 평범한 개발자이다. 1. 연봉 개발자 취업하면 연봉이 높다?.. 맞는 말일 수도 있고 틀린 말일 수도 있다. 본인이 어떤 회사, 업무, 기술 스택을 가지고 있느냐에 따라서 일반 사무직보다는 연봉이 높을 수 있다고 생각된다. 하지만 다르게 생각해 보면 내가 가진 게 없으면 당연하게 낮을 수밖에 없다. 우리가 생각하는 IT 대기업들은 당연하게 신입도 평균 이상은 챙겨줄 것이다. 회사 규모는..
snapkit에서는 inset과 offset이 있습니다. 둘은 비슷하면서도 많이 헷갈리기도 합니다. 저는 offset을 자주 사용하고 있긴 한데 둘의 차이점은 적용 대상의 안을 기준으로 하느냐 바깥을 기준으로 하느냐의 따라서 양수와 음수가 달라집니다. 사실 사용하다 보면서 그냥 익혀가는 게 더 빠르긴 합니다. // UI private func setUI() { // 슈퍼 View에 파랑색 View 추가 self.view.addSubview(self.myView) self.view.addSubview(self.secondView) // SnapKit 적용 self.myView.snp.makeConstraints { make in make.top.equalToSuperview() make.leading.eq..
매우 간단한 높이와 너비를 적용하는 방법을 알아보도록 하겠습니다. 지난번에는 equalTo를 사용해서 컴포넌트를 적용했습니다. 상/하/좌/우를 적용하면서 높이와 너비는 자동적으로 적용되게 하였습니다. 아주 간단한 높이, 너비 설정 코드 2줄로 빠르게 보고 넘어가겠습니다. // SnapKit 적용 self.myView.snp.makeConstraints { make in make.height.equalTo(200) make.width.equalTo(200) } equalTo를 사용해서 바로 높이와 너비를 지정해 줍니다. 이러면 코드가 적용되게 되는데, 사진과 코드를 비교하면 200이 제대로 적용된 것을 알 수 있습니다. 조심해야 할 점은 상수로 적용을 하고 오토레이아웃을 적용하는 것입니다. // SnapK..
equalTo() 이번에는 equalToSuperview 다음으로 equalTo를 배워 보도록 하겠습니다. 지난번에 알아본 equalToSuperview는 상위 뷰를 기준으로 레이아웃을 적용했다면 equalTo는 원하는 대상을 기준으로 적용하게 됩니다. // SnapKit equalToSuperview 적용 self.myView.snp.makeConstraints { make in make.top.equalToSuperview() make.bottom.equalToSuperview() make.leading.equalToSuperview() make.trailing.equalToSuperview() } // SnapKit equalTo 적용 self.myView.snp.makeConstraints { m..
equalToSuperview() 자신의 상위뷰와 똑같게 하겠다는 것, 위에 예시 코드를 보면 top, bottom, leading, trailing을 나의 SuperView와 똑같이 하겠다는 말입니다. (사용하다 보면, 개인적인 생각으로는 "똑같다~"라는 말도 맞지만, "기준으로 하겠다~"라는 말도 되는 것 같아요) 예시를 보면 최상위 View에 myView를 추가해서 부모 -자식 관계가 형성되었습니다. 이로서 myView는 부모 View를 기준으로 옵션들이 설정될 것입니다. 만약 저기에 View를 하나 더 추가하면 어떻게 될까요? // UI private func setUI() { // 슈퍼 View에 파랑색 View 추가 self.view.addSubview(self.myView) self.myV..
SnapKit 사용 중에 제일 기본기 UI 컴포넌트를 추가하도록 하겠습니다. UIView를 추가할 줄 안다면 다른 애들도 똑같이 사용 가능합니다. 다만 SnapKit이 아닌 UI마다 가진 고유 옵션들은 다를 수 있겠죠?? 제일 옵션을 줄게 없는 UIView에 backgroundColor를 Blue로 설정하여 추가하도록 하겠습니다. import SnapKit 원하는 사용 위치에서 라이브러리를 추가합니다. // UIView 선언 lazy var myView: UIView = { let view: UIView = UIView() view.backgroundColor = .blue return view }() 일단 아무 기능을 하지 않지만 파란색을 나타내는 UIView도 선언합니다. private func se..
주말에 아주 재미있는 이야기가 뉴스에서 나왔다. 바로 샘 올트먼 해고와 이직 관련이다. 세상을 떠들석하게 만든 ChatGPT를 등장하게 만든 OpenAI의 CEO이다. 사건의 발달은 간단하다. 울트먼이 OpenAI를 떠난다는 뉴스와 함께 시작되었다. 처음에는 별 관심이 없었으나, 마이크로소프트 주식을 가지고 있는 입장에서 관심이 생기기 시작했다. 마이크로소프트는 OpenAI에게 약 12조원을 투자하고, 최근 OpenAI 발표인 "데브데이"에서 마이크로소프트 CEO인 사티아 나델라도 특별 게스트로 나올정도로 두 회사는 가까운 사이로 지내고있다... 그리고 애저를 잘 써주고 있기 때문에 더욱더 관심이 생기게되었다. 정확하지는 않지만 뉴스 헤드라인 순서를 나열해보려고 한다. 뉴스 제목만 나온 순서대로 나열했습..
사진 한 장으로 설명 가능한 Rosetta 실행, 1. Xcode 실행 2. Product -> Destination -> Destination Architectures -> Show Rosetta Destinations 3. 끝 시뮬레이터 리스트를 열어보면 Rosetta 목록을 확인할 수 있습니다. ARM을 지원하지 않는 라이브러리가 있어서 맨날 실제 단말기로만 테스트하던 분들은 이 방법을 통해서 시뮬레이터로 실행을 시켜 보실 수 있습니다.
안녕하세요. 이번에는 iOS 앱의 처음 실행하는 경우에만 실행하는 로직들을 다루기 위한 글을 작성하려고 합니다. 이게 말이 iOS이지 사실 어느 프로그래밍을 하던 사용되는 방식을 비슷할 것이라고 봅니다. 다양한 방법이 있겠지만, 저는 UserDefatuls를 사용한 방법으로 진행할 것입니다. // 결과를 저장하는 함수 static func setIsFirstLaunch() { // UserDefaults에 값을 저장 let defaults = UserDefaults.standard defaults.set(true, forKey: "isFirstLaunch") } // 결과를 받아오는 함수 static func getIsFirstLaunch() -> Bool { let defaults = UserDefau..
https://m.search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EB%84%A4%EC%9D%B4%EB%B2%84+%EB%A7%9E%EC%B6%A4%EB%B2%95+%EA%B2%80%EC%82%AC%EA%B8%B0 네이버 맞춤법 검사기 : 네이버 통합검색 '네이버 맞춤법 검사기'의 네이버 통합검색 결과입니다. m.search.naver.com 문선, 블로그 포스팅, 과제 등 글을 작성하다 보면 맞춤법을 틀릴 수가 있습니다. 이런 상황에 맞춤법을 검사하고 싶은데, 어떻게 해야 할까요? 바로 네이버 맞춤법 검사기입니다. 검사기를 통해서 내가 입력한 글들의 맞춤법을 확인하고 교정해 보세요. 틀리기 쉬운 맞춤법 중에는 안/..
UIPasteboard.general.string = "저장 내용" 정말 간단한 코드면 원하는 내용을 복사할 수 있습니다. 원하는 버튼을 선택했을 때, 원하는 로직이 동작했을 때 위 코드를 사용해서 내용을 복사를 구현할 수 있습니다. UIPasteboard.general.image = UIImage(systemName: "car") 원하는 이미지도 이렇게 해서 복사 가능합니다.
macOS 맥 Sonoma 시작프로그램 관리 추가 제거 맥에서 시스템 부팅시 자동 실행되는 앱들을 추가하고 제거하는 방법 우선 "시스템 설정"을 실행 시스템 설정 좌측 메뉴에서 "데스크탑 및 Dock" 선택하고 설정들 중에서 "기본 웹 브라우저"를 변경. 설정하기 전에 Safari가 아닌 다른 사용하고 싶은 브라우저가 설치되어있어야함.