일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Python
- 개발자
- PyQt5
- Android
- ui
- Chrats
- graph
- charts
- TableView
- modal
- kotlin
- ios
- 라이브러리
- UIButton
- androidstudio
- 어플리케이션
- Swift
- Chart
- alamofire
- library
- cocoapods
- 개발
- 그래프
- Apple
- button
- Xcode
- PyQt
- Storyboard
- UITableView
- UIKit
- Today
- Total
목록전체 글 (316)
Jiwift
앱을 만들면서 설정 메뉴를 어떻게 구성하고 만들어 나가야 하는지 생각을 공유 앱 더 보기(설정) 메뉴는 어떤 것들이 필요할까? with 복붙태그 # '복붙태그' 앱은 출시 목적도 있으나 제가 배운 것들을 배포하여 테스트하는 목적을 가지고 있습니다. 그렇기 때문에 보시기에는 기능을 개발 추가하는 데 있어 계속 돌아 돌아간다는 느낌을 받으실 수 있다는 점 양해 부탁드립니다. 안녕하세요. 앱을 만들다 보면 메뉴는 어떻게 구성하고 설정은 어떻게 해야 하는지 고민할 때가 많은 것 같습니다. 저 같은 경우는 디자인을 잘하지 못하기 때문에 기본적인 구성을 갖춘 앱처럼 보이기 위해서 '더 보기' 메뉴를 추가해서 허전함과 구색을 갖추었습니다. 초기에 메뉴입니다. 하단 탭바는 어느 정도 구성을 갖춘 것 같으나, 설정에서는..
[SPM] Swift Package 라이브러리 02 - Privacy Manifest(PrivacyInfo) 추가 1. PrivacyInfo 파일 추가 배포하려는 라이브러리의 Package에 'App Privacy'를 추가해 줍니다. ' 2. PrivacyInfo 내용 추가 추가된 PrivacyInfo 파일의 이름은 변경하지 않아야 합니다. 그리고 +버튼을 누르면 리스트가 나오는데 추가해 주면 됩니다. '+' 버튼을 눌러서 입력이 필요한 내용을 추가합니다. 자동 완성이 되니깐 일단 추가합니다. 3. Package 설정 package.swift로 이동해서 target의 설정을 변경합니다. 기본적으로는 name만 있을 텐데, 저는 path와 resoureces를 추가하였습니다. path는 설정하지 않아도 되..
[SPM] Swift Package 라이브러리 01 - 생성하는 법 1. Git 생성 및 Clone SPM 라이브러리를 저장하고 배포하기 위한 TestSPM Git을 생성합니다. 원하는 위치에 Clone을 수행합니다. ignore 파일이 필요한 경우 저는 이걸 사용했습니다. 2. Swift Package 생성 swift package init 터미널로 'TestSPM' 폴더로 이동하고 'swift package init'을 해줍니다. 그러면 이렇게 Package 파일들이 생성되는데 이 상태로 깃에 한번 올려봅니다. 3. 코드 작성 public class TestSPM { public init() { } public func sayHello(name: String) { print("\(name) Hello..
[iOS/Xcode] Failed to load Info.plist from bundle 에러 해결하기 Xcode 업데이트 Xcode를 업데이트하고 나서 Failed to load Info.plist from bundle 에러가 발생했습니다. 저는 파이어베이스 버전이 문제였습니다. 파이어베이스를 사용하시는 분들은 한번 확인해 보세요. 10.22.0으로 변경. Firebase Apple SDK Release Notes (google.com) Firebase Apple SDK Release Notes Send feedback Firebase Apple SDK Release Notes Stay organized with collections Save and categorize content based on y..
SPM Privacy Manifest 추가를 까먹지 않기 위해 간단하게 메모한 글입니다. 다음에 더 자세하게 다루겠습니다. Privacy Manifest를 공부하다가 SPM을 통한 라이브러리 배포를 진행하고 Privacy Manifest까지 적용했습니다. 테스트를 위해서 앱을 만들어서 배포를 할 정도로 직접 하지 않으면 만족하지 못해서 간단하게 라이브러리를 하나 만들어서 깃으로 배포하고 테스트를 진행해 보았습니다. 방법을 간단하게 말하면 Package를 열어서 리소스에 xcprivacy만 잘 연결해 주면 적용이 됩니다. 이전에는 Target 설정도 중요한 줄 알았는데, 아니었습니다. 그냥 Package 설정만 잘하면 됩니다. 다음에 더 자세히 다루겠습니다. 테스트를 위한 라이브러리 wlxo0401/JDr..
정적 라이브러리(Static Library, .a) Privacy Manifest 추가에 대한 생각 2024년 03월 13일 이후 최신 내용은 아래 링크 [iOS/Xcode] 정적 라이브러리(Static Library) Privacy Manifest 추가 (tistory.com) [iOS/Xcode] 정적 라이브러리(Static Library) Privacy Manifest 추가 [iOS/Xcode] 정적 라이브러리(Static Library) Privacy Manifest 추가하기 저는 회사에서 사용 중인 정적 라이브러리(Static Library) '.a' 파일이 있습니다. 근데 이번에 애플 뉴스에서는 라이브러리 혹은 앱에서 jiwift.tistory.com 2024년 03월 13일 이전 내용 스태틱..
Xcode15 iOS 앱 이름, 권한 동의, 메뉴 등 현지화를 위한 다국어 지원 앱 현지화를 위해서 String Catalog를 사용합니다. 파일을 생성할 때 이름을 정해주기만 하면 Xcode와 앱이 알아서 언어를 설정해 줍니다. String Catalog 이름은 위와 같이 설정해 주면 됩니다. Localizable: 앱 안에서 사용하는 String Catalog InfoPlist: 권한 동의나 앱 이름에서 사용하는 String Catalog 앱 안에서 사용하기 위한 String Catalog입니다. Key를 사용해서 설정된 언어를 불러옵니다. self.topTitleLabel.text = String(localized: "Key") 위와 같이 Key 자리에 미리 설정한 것을 입력해 주면 앱에서 알맞게 ..
Framework에 Privacy Manifest 추가 실험하기 애플에서 써드파티 라이브러리에 Privacy Manifest를 추가해야 한다는 뉴스를 접했습니다. 그래서 한번 실험 삼아 해보는 글입니다. 자세한 내용을 다루지 않습니다. Privacy Manifest를 추가하는 방법은 App 혹은 Framework 프로젝트에 PrivacyInfo 파일을 추가하고 안에 내용을 채워 넣는 것입니다. 앱에 적용하는 것은 대충 알겠는데 Framework에 추가해도 잘되는지 실험해보고 싶었습니다. 일단 임시로 Framework를 생성하고 PrivacyInfo를 추가하였습니다. 테스트를 진행할 앱 프로젝트에 'MyTest'라는 프레임워크를 추가하였습니다. 추가되었는지 확인하는 방법은 아카이브를 진행하고 Privacy..
Xcode Framework Dynamic과 Static 제일 기본적인 차이 기록 많은 것을 알아보기보다는 기본적인 차이점 조금 알아보도록 하겠습니다. Framework의 빌드 옵션에서 Dynamic과 Static을 나누어서 빌드가 가능합니다. 사용하고자 하는 앱의 프로젝트에서 Framework를 추가하고 import를 통하여 사용 가능합니다. Dynamic이던 Static이던 앱의 빌드는 성공합니다. 하지만 코드를 수행하는 곳에서 차이가 있습니다 Dynamic 프레임워크: [Embed & Sign, Embed Without Sign]으로 설정해야 코드 수행 가능 Static 프레임워크: [Embed & Sign, Embed Without Sign, Do Not Embed] 설정에서 모두 수행 가능 빌드..
Set Xcode Build Settings User-Defined CONFIGURATION_BUILD_DIR 설정 원하는 타겟을 선택하고 Build Setting으로 이동하고 상단에 위치한 '+'를 눌러줍니다. 그럼 이렇게 생긴 메뉴가 추가됩니다. 'Add User-Defined Setting' 선택 메뉴를 선택하면 사진 처럼 'User-Defined' 옵션칸에 새로운 setting이 추가됩니다. 저는 'CONFIGURATION_BUILD_DIR'를 추가하였습니다. ../원하는폴더이름/원하는폴더이름/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 값을 이런식으로 적용하면됩니다. ../폴더이름/라이브러리/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAM..
String Catalog를 사용해서 앱 다국어 지원 완료 String Catalog를 사용해서 앱 다국어를 추가한 모습입니다. 퇴근하고 개발하다 보니 시간이 많이 부족하여 화면과 문구를 특정 문자로 정의하는 부분은 스킵하였습니다. 그래서 Key를 표현하고자 하는 문자 그대로를 사용하기로 했습니다.. 다른 사람들과 공유하는 프로젝트가 아니기 때문에 특정 규칙 없이 문자 그대로를 사용해도 적용해야 하는 위치와 내용을 알 수 있을 것 같았기 때문입니다. (기능이 많아지면 문제가 생길 것 같음) 그럼에도 불구하고 나 혼자서도 혼란이 생길 수 있는 부분은 KEY 문자 앞에 구분을 위해 "태그 그룹", "태그"와 같은 문구를 추가하여 구분 지을 수 있게 했습니다. String Catalog를 사용하면 앱 다국..
이번에는 앱의 다국어 지원을 추가해보려고 합니다. 앱이 기능이 더 추가된다고 생각하면 지금 타이밍에 하는 게 맞는 것 같아서 추가를 해둬야겠습니다. 영어와 한글 두개를 먼저 지원하는 방향으로 가야겠습니다. 다국어 지원을 하기 위해 찾아본 링크만을 위한 글입니다. iOS Localization. Xcode 15 신기능 스트링 카탈로그 | by woozoobro | Medium Swift) Localizing - 다국어 처리하기 (tistory.com) Swift) Localizing - 다국어 처리하기 안녕하세요 :-) 소들입니다 오늘은 Swift에서는 다국어를 어떻게 처리하는지에 대해 공부할 거예여! 다국어 처리가 무엇이냐 하면 우리가 화면에 다음과 같은 Label을 하나 만들고 text를 지정했어 ba..
iOS 앱 데이터 서버 없이 백업과 복원을 무료로 하는 법 (tistory.com) iOS 앱 데이터 서버 없이 백업과 복원을 무료로 하는 법iOS 환경의 앱을 Swift로 구현하면서 앱 데이터 백업과 복원을 무료로 하는 방법과 생각을 공유합니다. 개인이 앱을 만들다 보면 서버 없이 구현하는 경우가 많습니다. 이런 경우 DB는 다양한 라이jiwift.tistory.com 지난번에 위와 같은 글을 작성한 적이 있습니다. 일단 생각한대로 개발을 진행했고 생각한대로 동작하는 것까지 완료했습니다. 하지만 압축 과정에서 사용한 ZIPFoundation 라이브러리가 패스워드를 지원하지 않았기 때문에 압축에 비밀번호는 못 걸었습니다. 더 좋은 백업 방법이 있겠지만 왜 이 방법을 선택했냐면.. 그냥 해보고 싶었기 때문..
애플 Privacy Manifest 관련 메일을 받아보신 분이 있나요?? 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 2023년에 발표된 내용에 Privacy Manifest가 있습니다. 그 발표 후로 문제가 되는 앱에 대해서는 메일을 통해 알려주겠다고 나와있고, 2024년 봄부터는 앱 심사에도 영향이 간다고 공지가 되어있습니다. 혹시 위 내용과 관련해서 메일을 받..
Privacy Manifest를 앱에 추가해 보신 분 있나요?? 앱과 라이브러리에 PrivacyInfo를 추가해야 하는 것으로 알고 있는데, 앱에는 어떻게 추가해야 할까요?? 오픈 소스 라이브러리들이 하는 방식과 동일하게 그냥 추가하면 되는 것인지... 의견을 공유해 주시면 감사하겠습니다.
iOS 환경의 앱을 Swift로 구현하면서 앱 데이터 백업과 복원을 무료로 하는 방법과 생각을 공유합니다. 개인이 앱을 만들다 보면 서버 없이 구현하는 경우가 많습니다. 이런 경우 DB는 다양한 라이브러리가 있다고 해도 사용자의 데이터를 백업하고 복원하는 데는 무리가 있습니다. 일단 서버를 사용하지 않고, 백업과 복원이 가능해야 하고, 돈이 안 들어야 하고, 파일을 안전하게 보관해야 한다는 조건이 있습니다. 이미 알고 있던 것 CoreData 앱 데이터를 백업을 해주지만, 저는 Realm를 사용했기 때문에 생각을 하지 않기로 했습니다. 구글 드라이브 사용자의 구글 로그인을 통해서 드라이브 접근 권한을 받고, 드라이브 안에 앱 저장 공간을 확보하는 것으로 알고 있습니다. 무료라고는 하나 API를 연결하고 ..
fastlane 간단하지만 환경에 따라서 간단하지 않을 수 있습니다. 이럴거면 그냥 archive하지 설정을 이렇게 어렵게해야하나... 했지만.. 적용하고나니깐 알겠습니다. 명령어 돌리고 화장실을 다녀오니깐 확실하게 느껴지더라고요. 일단 저는 Testflight까지만 진행했고 아직 심사까지하는 절차는 하지 않았습니다. Testflight를 기준으로 업로드, 수출 규정 준서 체크까지 알아서 다해줍니다. 사진을 보시면 8분을 절약했다고 나와있네요. 심사 제출까지 해보려고했는데 에러가 발생해서 이 부분을 해결하고 테스트를 해봐야할 것 같네요. # This file contains the fastlane.tools configuration # You can find the documentation at http..
Error uploading '경로/경로/경로.ipa'. Unable to upload archive. Failed to get authorization for username '이메일' and password. ( The call to the altool completed with a non-zero exit status: 1. This indicates a failure. Could not download/upload from App Store Connect! Error uploading ipa file: [Application Loader Error Output]: Error uploading '경로/경로/경로.ipa'. [Application Loader Error Output]: Unable ..
fastlane 적용 법이 아닌 그냥 신세 한탄하는 글입니다.. 요즘 면접이나 우대사항을 보면 CI/CD, fastlane 같은 게 필수적인 것 같다. 그래 사용하면 편리하다는 건 알겠다. 근데 그것을 적용하기 위해서는 팀원들이 공감하고 같이 사용해야 한다. 혼자만 해서 무슨 의미가 있을까.. 근데 앱하나 그냥 만드는 것도 따라오기 벅찬 사람들도 있다. 근데 내가 적용한다고 좋아할까?? 업무외적으로 시간을 더 사용해야 하는 회사라면 더욱더 그렇다. 물론 서비스를 가진 회사이거나, 공부를 좋아하는 사람들이 모인 곳이면 누구 한 명이 적용하는데 시간을 사용하고 나머지 인원들이 업무 서포트해 줄 수 있다. 근데 나는 그런 상황이 아니잖아? 물론.. 사람들을 설득하는 것도 능력이라지만.. 그럴 수 있는 환경이라..
JTAppleCalendar에서 선택과 상관없이 오늘 날짜를 바로 표시하는 방법 지난 글 예제를 사용하면 날짜를 선택하는 기능이 있습니다. 이번에는 선택 없이 현재 날짜를 표시하도록 하겠습니다. 일단 오늘 날짜를 표시하기 위한 View를 Cell 안에 하나 생성합니다. 저는 정사각형으로 생성하였습니다. 그리고 Cell 코드에 IBOutlet을 todayView라는 변수로 연결하였습니다. 생성한 View는 색상을 지정해 주어서 눈으로 확인 가능하게 합니다. // DateComponents를 사용하여 두 날짜의 연, 월, 일 부분을 추출합니다. let components1 = Calendar.current.dateComponents([.year, .month, .day], from: date) let com..
JTAppleCalendar에서 특정 이벤트가 있을 경우 달력의 시작점과 끝점으로 한 번에 이동하는 기능 저는 StartDate 버튼과 endDate 버튼을 생성하였습니다. @IBAction func startDateButton(_ sender: Any) { self.calendarView.scrollToSegment(.start) } @IBAction func endDateButton(_ sender: Any) { self.calendarView.scrollToSegment(.end) } 그리고 위와 같이 코드를 작성하면 시작과 끝으로 한번에 이동이 가능하게 됩니다. 이전 달, 예정 달로 이동하는 방식과 동일하기 때문에 필요한 상황에 잘 사용하면 될 것 같습니다.
JTAppleCalendar를 사용하면서 달력을 지난달로 이동하거나 예정 달로 이동하는 기능을 알아봅니다. 저는 이벤트 발생 조건을 버튼으로 사용하려고 2개를 생성해 주었습니다. @IBAction func next(_ sender: Any) { self.calendarView.scrollToSegment(.next) } @IBAction func previous(_ sender: Any) { self.calendarView.scrollToSegment(.previous) } 그리고 IBAction을 연결해 주고 위와 같이 작성하였습니다. 정말 간단한 방법으로 앞/뒤 달을 이동 가능하게 만들어 저 있습니다. 버튼 혹은 특정 이벤트를 통해서 달력을 컨트롤할 수 있습니다.
JTAppleCalendar에서 스크롤 발생 시 페이징 기능으로 동작하게 하기 Storyboard로 작업하시는 분들은 Scoll View 옵션을 지정해서 페이징을 on/off 하실 수 있습니다. self.calendarView.isPagingEnabled = false 코드로는 이런 식으로 작성하면 on/off가 가능합니다. 그냥 UICollectionView의 기능을 사용하는 것이라서 이미 아시는 분들은 쉽게 찾으셨을 것 같습니다. 동작 모습
JTAppleCalendar는 세로, 가로를 설정할 수 있습니다. 매우 간단하기 때문에 짧게 끝날 것 같습니다. 달력을 보여주는 방법은 지난 글을 확인해 주세요. 위 사진과 같이 Storyboard를 사용하시는 분들은 UICollectionView의 Scroll Direction을 'Vertical, Horizontal' 중에서 선택해 주시면 됩니다. self.calendarView.scrollDirection = .horizontal 코드로 생성하면 이런 식으로 가능합니다. 좀 더 응용해 보면 위와 같이 버튼을 두 개 만들어서 방향을 원하는 순간에 변경할 수 있습니다. @IBAction func horizontalButton(_ sender: Any) { self.calendarView.scrollDi..
JTAppleCalendar를 사용해서 달력을 생성하고 출력하도록 하겠습니다. JTAppleCalendar를 사용법을 공유하는 한글 게시글이 아예 안 나오는데.. 저만 그런가요?? 아무튼 시작. JTAppleCalendar는 CollectionView를 기본으로 하는 라이브러리입니다. 일단 모두가 보고 알 수 있게 Storyboard를 사용해서 글을 작성하겠습니다. Code Base로 하실 분들은 참고하여 진행해 주세요. import UIKit import JTAppleCalendar class ViewController: UIViewController { let df = DateFormatter() override func viewDidLoad() { super.viewDidLoad() } } impo..
안녕하세요. 오늘은 JTAppleCalendar라는 라이브러리를 알아보려고 합니다. 기존에 잘 사용하는 FSCalendar가 있지만 한번 간단하게 알아보고 어느 정도 수준인지도 체크를 할 것입니다. 우선 두 라이브러리를 비교하자면 FSCalendar와 JTAppleCalendar는 달력 라이브러리입니다. Fork Star Last Commits FSCalendar 2000 105,000 2024/01/02 JTAppleCalendar 794 75,000 2024/01/19 깃허브를 기준으로 우선 비교를 해보겠습니다. Fork 수는 우리가 흔하게 볼 수 있는 FSCalendar가 많이 앞서고 있습니다. 하지만 Star 수는 둘 다 적지 않고 FSCalendar가 앞서기는 하지만 JTAppleCalendar..
iOS 뉴비 개인 앱 만들기 시작 (tistory.com) iOS 뉴비 개인 앱 만들기 시작 오래간만에 나만의 어플리케이션을 만들고 있다. 회사에서 배운 경험과 스택으로는 남들보다 많이 늦어진다는 생각이 항상 있기 때문에 집에서 공부를 하다가… 앱을 만들고있다. 적용하지 않 jiwift.tistory.com 앞전에 개인 앱 만들기 시작이라는 글을 올린 적이 있습니다. 그리고 출시를 완료했습니다. 이로서 개인적으로 진행하고 공개한 프로젝트가 3개가 되었습니다. 1. 사진에 숫자 입력 -> 아는 지인이 필요해서 출시한 앱(앱 주제를 고르기가 어려워 개인 맞춤으로 제작해 줌 ㅎㅎ) 2. MAutoClick -> SwiftUI를 공부할 겸 맥용으로 만든 오토마우스 앱! 오픈 소스이니 많은 기여 부탁드립니다. 3..
Privacy Manifest에서 NSPrivacyTracking와 NSPrivacyTrackingDomains를 확인하기 위해서 애플에서 알려준 방법입니다. 원하는 프로젝트에서 Product -> Profile 선택해 주세요. 이러면 앱 빌드를 진행하고 완료되면 창이 하나 뜨게 됩니다. 여기서 Network를 선택해주세요. Network를 선택하면 창이 바뀌고 녹화하는 버튼을 선택할 수 있습니다. 여기서 녹화는 로그를 기록하는 것입니다. 결과를 저장할 수 있습니다. 이미 다른 녹화가 진행 중이라면 끝내고 실행할 수 있습니다. 녹화를 진행하면 문제가 되는 지점에서 표시가 됩니다. 사진을 보면 기록 화면 왼쪽에 'HTTP Traffic', 'Network Connections', Points of Inte..
생각보다 중요한 내용인 것 같지만 경험해 본 자료도 없고 아직 PrivacyManifest를 제대로 하지 않았을 경우? 어떤 식으로 심사 과정이 진행되는지는 정보가 없어서 적용에 대한 방법들과 범위가 너무 궁금한데요… NSPrivacyTracking, NSPrivacyTrackingDomains, NSPrivacyCollectedDataTypes, NSPrivacyAccessedAPITypes 중에서 접촉되는 게 없는 타사 라이브러리도 PrivacyInfo를 추가해야하는 것인가?? https://developer.apple.com/support/third-party-SDK-requirements/ 에서 애플이 언급하지 않는 타사 라이브러리도 PrivacyInfo를 추가해야하는 것인가?? 내가 만든 정적 ..
[iOS/Swift] 'authorizationStatus()' was deprecated in iOS 14.0 초간단 해결 저는 위와 같이 코드를 사용해서 위치 권한 상태에 따른 팝업을 보여주도록 하였습니다. 하지만 iOS 14부터는 authorizationStatus()가 Deprecated 되기 때문에 수정을 진행하려고 합니다. 앱 최소 지원 iOS가 15이기 때문에 OS에 따른 분기는 없이 처리할 수 있습니다. CLLocationManager.authorizationStatus() 기존에는 이렇게 사용하던 코드를 CLLocationManager().authorizationStatus 이렇게 변경하면 됩니다. 소괄호를 CLLocationManager로 옮겨주기만 하면 됩니다. 아래는 사용 예시입니다..