일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- kotlin
- PyQt
- UIKit
- cocoapods
- Android
- Chart
- 어플리케이션
- Storyboard
- modal
- ios
- 개발자
- Chrats
- Swift
- 개발
- alamofire
- PyQt5
- UIButton
- 그래프
- Xcode
- Apple
- button
- library
- charts
- ui
- TableView
- 라이브러리
- androidstudio
- UITableView
- Python
- graph
- Today
- Total
목록라이브러리 (83)
Jiwift
[iOS/Swift] DGCharts 차트 xAxis 그래프 아래로 내리기 기본적으로 그래프를 생성하면 왼쪽과 같이 표시가 됩니다. xAxis의 선과 제가 설정한 카테고리 label이 상단에 위치하게 됩니다. 이것을 아래로 내려 오른쪽과 같이 변경하는 코드를 알려드리겠습니다. self.barChart.xAxis.labelPosition = .bottom 이렇게 Chart에 옵션을 적용하면됩니다.
깃허브 이슈에서 RxSwift 관리자(freak4pc)와 여러 사람들(저 포함)이 PrivacyManifest 대화를 나눈 내용을 요약한 글입니다. RxSwift는 애플이 언급한 라이브러리 리스트에 속해있다.mach_absolute_time가 있다.RxSwift 테스트를 위한 것이기 때문에 PrivacyInfo에 추가할 내용은 없다.심사 과정에서 Privacy Manifest 관련 메일은 오지 않는다.애플은 빈 PrivacyInfo를 추가하지 말라고 DTS가 언급한 적 있다.2024년 04월 25일 기준으로 심사에서 RxSwift에 관한 메일은 오지 않았다.RxSwift가 애플이 언급한 라이브러리에 속하지만 추가할 것이 없고 DTS는 빈 info를 추가하지 말라고 언급을 했던 상황이다. 애플에게 그럼에..
[iOS/Swift] 카카오 공유 SDK 라이브러리 피드(Feed) 탬플릿 간단한 조사 Image, Title, Description, Button 추가 가능합니다. Title이 생략되지 않는 최대 글자 수 숫자, 영문, 한글 길이가 다르므로 사용하시는 제목에 맞춰 테스트 해봐야합니다. Description이 생략되지 않는 최대 글자 수 텍스트 타입으로 메시지 발송하시면 200자까지 가능하나 Feed은 두줄만 가능합니다. 기기 해상도, 글자 크기에 따라서 다르게 보일 수 있지만 최대 두줄까지만 가능합니다. Title과 Description에서 특장 문자를 강조하기 텍스트 커스터마이징은 불가능합니다. ex) 굵기, 강조 등 카카오톡에 정해진 양식을 사용해야합니다. 우리가 JSON 형태를 넘기면 카카오톡 앱..
[iOS/Swift] Charts, DGCharts 차트 라이브러리 그래프를 만들기 위한 라이브러리를 이름을 소개하고 정리하는 글입니다. ChartsOrg/Charts: Beautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroidChart. (github.com) GitHub - ChartsOrg/Charts: Beautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroidChart. Beautiful charts for iOS/tvOS/OSX! The Apple side of the crossplatform MPAndroidChart. - ..
[iOS/Swift] 카카오 공유(Share) SDK 라이브러리 간단한 조사 KakaoSDKShare, KakaoSDKTemplate, KakaoSDKCommon 설치 필요 필수 라이브러리입니다. KakaoSDKShare만 설치해도 나머지 두개가 같이 설치됩니다. Package에서 dependencies 정보를 통해 추가 라이브러리 자동 설치됩니다. Info.plist 파일 Queried URL Schemes 추가 적용 필요 kakaokompassauth, kakaolink URL Schemes 추가 적용 필요 kakao네이티브Key 추가합니다. 만약 네이티브 key가 ‘1438’ 이라면 ‘kakao1438’로 추가 KakaoSDKShare, KakaoSDKTemplate, KakaoSDKCommon 사..
Kakao SDK를 설치하고 사용하기 전에 간단하게 알아보는 시간입니다. 내용은 문서, 깃, 직접 질문을 통해서 알아보았습니다. https://github.com/kakao/kakao-ios-sdk SDK 다운로드 가능합니다. 개발자 센터 문서에 branch를 master로 설치하라고 되어있지만 Exact Version해도 문제는 없습니다. 2.22.0부터 Privacy Manifest 적용되었습니다. Xcode 15.3부터는 2.21.1 미만 버전에서 AppStore Connect 업로드 에러 발생합니다. ex) KakaoSDKCertCore, KakaoSDKFriendCore 라이브러리 종류가 많기 때문에 잘 골라서 설치를 해야 할 것 같습니다. KakaoSDK를 선택하면 모든 라이브러리가 설치됩니다..
[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..
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..
사진과 같이 화면 전체를 덮는 TableView를 생성하겠습니다. 간단한 코드 몇줄로 끝내기. lazy var tableView: UITableView = { let tableView: UITableView = UITableView() tableView.backgroundColor = .orange return tableView }() 우선 테이블 뷰를 선언해줍니다. self.view.addSubview(self.tableView) self.tableView.snp.makeConstraints { $0.top.leading.trailing.bottom.equalToSuperview() } 그리고 원하는 위치에서 선언과 제약 조건을 걸어줍니다. 이러면 기본적으로 화면에 표시됩니다. lazy var tabl..
그래프의 값을 표시한느 선을 빼고는 모든 것을 지우고 싶은 경우에 사용. 아마 Bar Graph도 동일 적용될 것입니다. // 범례 삭제 chart.legend.enabled = false // x축 Grid chart.xAxis.drawGridLinesEnabled = false // x축 라벨 chart.xAxis.drawLabelsEnabled = false // x축 선 chart.xAxis.drawAxisLineEnabled = false // 왼쪽 값 표시 제거 chart.leftAxis.enabled = false // 오른쪽 값 표시 제거 chart.rightAxis.enabled = false 위 옵션을 적용하면 그래프 값을 나타내는 선 말고는 모두 제거될 것 입니다.
스냅킷에서는 중앙을 쉴게 잡아주는 기능이 있습니다. 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..
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..
안녕하세요. 이번에는 아이폰에서 웹 서버를 열 수 있게 해주는 GCDWebServer를 알아보려고 합니다. 사실 저도 많이 제대로 알지는 못하지만, 조금이나마 정보를 공유해 누군가는 필요할 수 있게 하려고 글을 작성하고 있습니다. swisspol/GCDWebServer: The #1 HTTP server for iOS, macOS & tvOS (also includes web based uploader & WebDAV server) (github.com) GitHub - swisspol/GCDWebServer: The #1 HTTP server for iOS, macOS & tvOS (also includes web based uploader & WebDAV server) The #1 HTTP serve..
[iOS/Swift] Firebase Crashlytics 에러 로그 수집 Apple, Android, Flutter, Unity를 위한 강력한 비정상 종료 보고 솔루션으로 앱 문제에 대한 명확하고 활용 가능한 분석 정보를 확인해 보세요. 구글 Firebase 상품 안에는 Crashlytics라는 에러 로그 수집 서비스가 있습니다. 가벼운 실시간 비정상 종료 보고 도구로 앱 품질을 저하하는 안정성 문제를 추적하고 우선순위를 지정하고 문제를 해결하는 데 도움이 됩니다 이미 구글 문서도 잘 되어 있지만 사진과 함께 설치와 사용법을 알아보도록 하겠습니다. 우선 파이어베이스와 앱을 연동하지 않은 분들은 앞에 글을 읽어주시기 바랍니다. 글 순서 1. 설정 2. 사용법 3. 안될 때 SPM을 사용해서 설치하도록 하..
[iOS/Swift] Firebase - 앱과 기본 연동하기(콘솔, info.plist) 구글 Firebase 기능을 사용하기 위해서는 콘솔을 통해서 앱을 연결시켜주어야 합니다. 어떤 기능을 사용하던 제일 첫 단계이니 모두 공통적으로 적용됩니다. 앱과 파이어베이스를 연동하기 위해서는 Bundle identifier를 필요로 합니다. Xcode에서 프로젝트 타겟으로 이동하여 번들을 확인하고 복사해 주세요. 현재 글 기준으로는 'com.jitaekim.FFFCCCMMM'입니다. 구글 파이어베이스 사이트로 이동합니다. Firebase Console (google.com) 여기서는 프로젝트를 생성할 수 있는데, 우선 적용하고자 하는 서비스 이름으로 프로젝트를 생성하고 나면 위 사진과 같은 프로젝트 페이지가 나옵..
짧고 간결하게 알아보는 Alamofire 개발하다가 Body와 Query를 동시에 전송해야하는 일이 있었습니다. 근데 제 머리로는 간편하게 하는 방법이 생각나지 않았으나 그래도 먼길 돌아 해결한 것 같아 공유하려고합니다. func dictionaryToJsonString(dictionary: [String: Any]) -> String? { do { let jsonData = try JSONSerialization.data(withJSONObject: dictionary, options: []) if let jsonString = String(data: jsonData, encoding: .utf8) { return jsonString } } catch { print("Error converting di..
짧고 간결하게 알아보는 Alamofire 서버와 데이터를 주고받는 방식은 다양하게 있습니다. 이번에는 URL에 데이터를 담아서 보내도록 하겠습니다. let headers: HTTPHeaders = ["Content-Type": "application/json", "Accept": "application/json"] let parameters: Parameters = ["userId": "swift", "name": "kimjitae", "amount": 1000, "age": 27] AF.request(url, method: .get, parameters: parameters, encoding: URLEncoding.queryString, headers: headers) .validate(statusCo..
짧고 간결하게 알아보는 Alamofire 서버와 데이터를 주고받는 방식은 다양하게 있습니다. 이번에는 Body에 데이터를 담아서 보내도록 하겠습니다. let headers: HTTPHeaders = ["Content-Type": "application/json", "Accept": "application/json"] let parameters: Parameters = ["userId": "swift", "name": "kimjitae", "amount": 1000, "age": 27] AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers) .validate(statusCod..