일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- UITableView
- charts
- Chrats
- ios
- cocoapods
- kotlin
- Apple
- PyQt
- library
- Python
- 그래프
- TableView
- 라이브러리
- Swift
- graph
- 어플리케이션
- ui
- PyQt5
- UIKit
- UIButton
- Android
- androidstudio
- Xcode
- alamofire
- Storyboard
- 개발자
- modal
- button
- Chart
- 개발
- Today
- Total
목록전체 글 (316)
Jiwift
토스 페이먼츠에는 멀티 결제 UI라는 기능이 있습니다. 상품에 따라서 결제 방법을 다르게 한다는 기능인데, 커스터 마이징이 간편하다는 마케팅을 하는 서비스인 만큼 화면도 간편하게 변화를 줄 수 있는 건 좋은 것 같습니다. (사실 다른 회사들은 어떤지 모름.) 결제 화면을 꾸밀 수 있는 결제 UI 설정 메뉴에서 UI 추가하기 버튼을 누르면 커스터 마이징이 가능한가 봅니다. 저는 안 해봤기 때문에 얼마나 편리한지는 모르겠지만 앱에서 적용하는 건 정-말 간단합니다. 지난 글을 읽고 오신분들은 사실 이미 알고 있는 방법이기도 합니다. 바로 variantKey를 활용하는 것인데요. 새로운 UI를 추가할 때 variantKey도 같이 생성하게 됩니다. (제가 직접 해본 건 아니고 토스 말대로는 그래요..) // 결..
토스에서 제공해 주는 솔루션 중 '브랜드 페이'라는 것이 있습니다. 서비스만의 간편 결제를 지원한다고 합니다. 카드와 계좌를 추가하고 관리할 수 있게 됩니다. 토스 개발자 센터에서 있는 내용을 기반으로 작성되어 많은 내용이 중복됩니다. 저는 브랜드 페이를 사용하지 않아서 화면 연동만 수행하는 것까지 진행해 보겠습니다. 토스에서 주장하는 기능 1. 결제수단 등록 및 관리(카드/계좌 2. 결제수단 별명 설정 3. 결제 관리 4. UI 커스터 마이징 5. 자동결제 브랜드페이에서 Access Token이란? 브랜드페이는 고객 정보와 관련된 API를 사용할 때 Bearer 인증과 Access Token을 사용해요. Access Token은 고객을 식별하고 보호된 고객 정보에 접근할 때 필요한 토큰이에요. 예를 들..
티스토리 투데이 버그현상을 공유하려고 한다. 투데이를 증가시키는 그런 내용이 아닌 진짜 버그이다. 이게 원래 그런지는 모르겠지만, 같은 시간에 찍은 투데이를 보았을 때 관리 화면은 71이고 블로그에서 본 화면은 17이다. 새로고침을 해보아도 마찬가지였다. (사진으로 1분 차이가 있지만 캡처 당시에는 바로바로 찍은 사진입니다.) 이게 티스토리 정책상 블로그 화면에 투데이를 업데이트하는 주기가 있는지는 모르겠지만.. 일단!.. 은 표시가 다르게 되는 버그가 있다고 판단했다. 시간이 흘러 관리자 화면 투데이가 89가 되었음에도 블로그 화면에서는 17로 나왔다 CSS 에러인지 아니면 진짜 업데이트하는 주기가 있는지는 기다려봐야 알 것 같다. (아시는 분 있으면 알려주세요 ㅎㅎ..) 블로그 글을 예약으로 작성하기..
우리는 지난 글에서 토스 페이먼츠의 '결제 위젯'을 화면에 표시하는 방법을 알아보았습니다. 그 상태로도 결제가 진행되는 결제 수단들이 존재하기도 하지만(like toss...) 아닌 수단들도 존재합니다. 예를 들어 제가 사용하는 현대 카드 같은 경우는 앱을 실행해주어야 하는데 지난 글에서 진행한 상태로는 앱 실행이 아닌 앱스토어로 유도되는 기능만 하지 결제 정보가 넘어가지 않았습니다. 이 부분은 제가 참고한 토스 벨로그에도 따로 언급이 없어서 제가 잘 못한 것일 수도 있지만 방법은 언제나 존재했습니다. 해당 내용은 토스 개발자 센터에 '웹뷰 연동하기'에서 찾을 수 있는데, '우리는 SDK 연동이니깐'라고 해서 무시하고 지나가면 안 됩니다. 중간에 보면 앱 스킴 목록이 나옵니다. *우선 위 설명은 웹뷰 과..
이번 시간에는 Toss Payments의 결제 위젯 SDK를 연동하도록 하겠습니다. 사실 이미 토스 패이먼츠 개발자 블로그나 개발자 센터에 방법이 다 나와있기는 합니다. 하지만 정리하고 넘어가기 위해서 글을 작성해 보도록 하겠습니다. *진행을 하기 위해서는 토스 서버와 연결 작업이 완료된 서버가 있다는 가정하에 앱 부분만 설명하도록 하겠습니다. *이 글에서는 Storyboard가 아닌 코드를 통한 UI 구현으로 진행하겠습니다. 1. 초기 선언 작업 2. 위젯 UI 보이기 3. 사용자 구매 정보 입력 및 결제 진행 4. Delegate를 통해 결과받고 처리하기 앱에서 결제를 처리하기 위한 단계로는 크게 4가지로 볼 수 있습니다. 결제에 필요한 초기 선언과 init 작업들을 진행하고, 위젯 UI를 출력한 후..
[iOS/Swift] TestFlight 이전 빌드 다시 받기 [iOS/Swift] 테스트플라이트 이전 빌드 다시 받기 이번에는 TestFlight된 이전 빌드를 다시 받아 보려고 합니다. 생각보다 TestFlight 앱을 자세하게 보시는 분들이 없는 것을 알고 글을 작성하였습니다. 사실 정말 간단하기 때문에 그렇게 긴글이 되지 않습니다. 저는 하급 노동자이기 때문에 TestFlight에 있는 앱은 모자이크 처리하는 점 양해 부탁드립니다. 테스트플라이트를 접속하면 내가 속했던 테스트 앱들이 나오게 됩니다. 거기서 이전 빌드를 '원하는 앱'을 선택해주고 메뉴에서 '이전 빌드'를 선택해서 들어가주세요. '이전 빌드'를 들어오게되면 테스트가 등록된 버전들이 나오게 됩니다. 여기서 원하는 버전을 선택해서 들어가..
[iOS/Swift] Toss Payments - 결제 솔루션 알아보기 자료 출처 : 토스 페이먼츠 오늘은 토스 결제 솔루션인 Toss Payments를 알아보도록 하겠습니다. 이름에 맞게 솔루션은 결제를 담당하며 UI와 API를 제공해 줍니다. 토스답게 찾아보면 개발자 사이트도 정리가 잘되어있어서 보기 좋지만 iOS만을 위한 정보와 경험으로 정리해 보도록 하겠습니다. 이번에는 크게 3가지로 분류되는 결제 서비스 종류를 소개하겠습니다. 결제 위젯(단건 결제) 토스페이먼츠가 제공하는 기본 결제 서비스 결제수단 추가 및 제거 가능 신용/체크카드, 각종 간편 결제 시스템과 연동 특별한 사유가 없으면 해당 솔루션을 사용 토스는 결제 위젯을 위와 같이 설명하고 있습니다. 쉽게 생각해서 우리가 사용하는 PG 기능을..
할 줄 아는 건 원카드와 롤토체스 밖에 모르는 사람의 강원랜드 두 번째 방문기 내부에서는 사진을 찍을 수 없어 올릴 사진이 없다. 도박을 하면 가정이 망할 수 있습니다. 위치 위치는 "강원특별자치도 정선군 사북읍 하이원길 265"이다. 서울에서 가려면 진짜 멀다. 강릉, 양양, 속초에서도 진짜 멀다... 한번 가려면 마음먹고 가야 한다. 사실 위치 때문에도 중독되기가 힘든데, 도박 중독에 빠지는 사람들은 진짜 대단하다... 가는 방법은 운전으로 가는 게 대부분일탠데,,, 정말 정말 마음먹고 가야 한다. 방문 이유 방문 이유는 하이원 리조트에 있는 루지를 탑승하기 위해서 갔다가 시간이 남아서 강원랜드를 방문하게 되었다... 애초에 돈을 걸고 도박하는 것을 싫어하는 성격이기도 하고 룰을 하나도 모르는 데다가..
iOS가 업데이트되면서 개발자 모드를 사용하기 위해서 설정에서 활성화를 해야 하는 단계가 추가되었습니다. 어렵진 않으나 어쩌다 한번 설정하기 때문에 헷갈리는 경우가 있어 블로그에 저장하도록 하겠습니다. 아이폰 설정 -> 개인정보 보호 및 보안 -> 개발자 모드 -> 활성화 위 순서대로 개발자 모드를 활성화합니다. 여기서부터는 애플이 하라는 대로 수행하면 되기 때문에 따로 알아볼 필요는 없습니다. 혹시 모르니 일단 다음 절차들이 궁금하신 분들은 계속 읽어주세요. 개발자모드를 활성화하면 재시동을 요구합니다. 아이폰이 재시동하면 Alert으로 한번 더 확인하고 단말기에 비밀번호가 설정된 경우 암호를 입력하면 됩니다. 이로서 개발자 모드를 활성화를 완료했습니다.
[iOS] 아이폰 사파리(Safari) 동작 안 할 때 혹은 결제, 본인인증 창 안 뜰 때 아이폰을 사용하다 보면 혹은 웹을 개발하다 보면 Safari에서 원하는 동작을 하지 않을 수 있습니다. 버튼이 안 눌러지거나, 결제 화면이 안 뜨거나 본인인증이 안 뜨거나와 같은 상황입니다. 이런 경우 정말 버그일 수 있지만 우선적으로 설정을 먼저 확인해봐야 합니다. 아이폰 설정 -> 고급 -> JavaScript 위 설정이 어떻게 되어있느냐에 따라서 웹이 동작하거나 안 할 수 있습니다. 이미 활성화되어있는 경우 다른 문제가 있을 수 있지만, 비활성화 상태라면 상태를 변경하고 웹에서 동작을 다시 한번 확인해 보세요.
오늘은 아이폰을 사용하다 보면 Safari에서 팝업이 안 떠서 결제가 진행이 안되거나 본인인증이 안 되는 경우를 겪으신 분들을 위해서 글을 작성합니다. 팝업차단을 허용하시기 바랍니다. 위 상황의 경우 팝업 차단뿐만 아니라 JavaScript 허용도 확인해봐야합니다. 바로 아래 사진을 통해서 확인하겠습니다. 1. 팝업 허용 요약하자면 아이폰 설정 -> Safari -> 팝업 차단 허용 을 통해서 손쉽게 가능합니다. 이렇게 해도 Safari에서 원하는 팝업이 뜨지 않는다면 JavaScript를 허용해야 합니다. 아래는 방법입니다. 2. JavaScript 허용 아이폰 설정 -> Safari -> 메뉴 아래로 이동 -> 고급 -> JavaScript 활성화 위 두 방법을 통해서 모두 활성화를 시키면 Safar..
Xcode에서 창을 여러 개로 띄우는 방법을 공유합니다. 제가 아는 건 두 가지입니다. 원하는 코드에서 우클릭하고 Open In New Window를 누르면 창이 하나 더 추가된다. 혹은 Command + T를 누르면 프로젝트가 탭으로 나뉘는데 원하는 탭 하나를 잡고 드래그해보면 분리된다. 끝!
[iOS/Swift] Xcode Unable to Authenticate with App Store Connect / No App Store Connect Access For The Team Xcode에서 업로드를 하는 도중에 두 에러가 발생했다. 1. Xcode Unable to Authenticate with App Store Connect 2. No App Store Connect Access For The Team 전혀 문제가되지 않던 계정이었는데 뭔가 문제일까 앱스토어도 확인하고 signing도 확인했으나,,,, 해결법은 맥 재부팅이었다.. The solution is to reboot your Mac.
Xcode에서 프로젝트를 열고 배포 준비를 마무리해줍니다. 상단 Product 메뉴를 선택하고 Archive를 진행하면 빌드와 함께 ipa 파일을 생성하게되고 Organizer 화면이 표시될 것 입니다. 여기서는 Archive된 목록이 표시되게 됩니다. 선택을 제대로 해주고 Distribute App을 선택해주세요. 그럼 이렇게 배포 유형이 표시되게 되는데요. 기본적으로 TestFlight & App Store를 선택하고 작은 Distribute를 누르면 업로드 절차가 수행됩니다. 원래는 이것 저것 표시되는 것들도 많았는데, Xcode 15부터는 바뀐 모양입니다. 이전 모습을 보고 싶으신 분들은 Custom을 통해서 진행하면됩니다. 프로비저닝이 필요하신분들도 Custom으로 진행해주세요. 업로드가 완료되..
이번 글에서는 카메라와 앨범의 권한 요청 및 권한 확인하는 코드를 알아보겠습니다. iOS 14 이상을 기반으로 작성되었습니다. enum MediaPermissionType { case camera // 카메라 권한 유형 case album // 앨범 권한 유형 } MediaPermissionType 열거형을 선언해서 사용하도록 하겠습니다. 그렇게 중요한건 아니고 개발자마다 분기문을 작성하는 방법이 다르기 때문에 전체 코드를 보시고 취향것 하시면 됩니다. camera: 카메라 권한을 나타내는 열거형 케이스. album: 앨범(사진 라이브러리) 권한을 나타내는 열거형 케이스. static func requestPermission(type: MediaPermissionType, completion: @esca..
import UserNotifications struct NotificationPermissionCheck { /* 사용자의 알림 권한을 확인하고 결과를 완료 핸들러를 통해 반환합니다. - Parameter completion: 알림 권한 확인 결과를 처리할 완료 핸들러입니다. `true`는 알림 권한이 부여된 경우를 나타내고, `false`는 권한이 거부되거나 아직 결정되지 않은 경우를 나타냅니다. */ static func check(completion: @escaping (Bool) -> Void) { let current = UNUserNotificationCenter.current() current.getNotificationSettings { settings in switch settings...
안녕하세요. 오늘은 개인적으로 사용하기 위해서 작성한 코드를 공유하려고합니다. 앱 UI 달력에서 월을 선택하면 그 기준으로 전/후 몇개월 기간을 계산해서 서버로 보내야하는 코드가 필요해서 만들었습니다. 현재는 연/월이 기준이지만 조금만 수정하면 연/월/일까지 사용 가능한 코드라서 조금만 보시면 바로 이해하실겁니다. 아래는 코드입니다. // 특정일을 연/월을 기준으로 범위 구하기 static func getDateRange(year: Int, month: Int, past: Int = 0, future: Int = 1) -> (fromDuration: String, toDuration: String) { // 입력 받은 날짜로 Date 구성 let calendar = Calendar.current var ..
지난 글들에서 블로그 유입률에 대해서 간단하게 알아본적이 있습니다. 모든 블로그가 동일한건 아니지만, 제 블로그 같은 경우는 주말, 공휴일과 같이 쉬는 날이면 항상 유입율이 많이 줄어들었습니다. 9월과 10월에도 추석과 공휴일들이 많아서 그래프도 동일한 모습을 보이네요.
[iOS/Swift] 테스트 플라이트(TestFlight) 배포시 Debug 상태로 배포하는 방법 정말 기초적인 내용입니다. 우선 해당 내용을 수행하기 위해서는 Configuration 및 Scheme이 설정되어야한다. Xcode로 프로젝트를 기본 생성하면 Configuration이 Debug와 Realese가 존재하는데.... 아무것도 건들지 않고 작업을 진행하면 크게 문제가되지 않지만, Debug와 Realese를 상황에 따라서 다르게 동작하거나 바라보는 서버를 다르게 구현하는 경우가있다. 이런 동작을 하지 않는다면 굳이 이 글을 읽을 이유는 없다. (사실.. 이미 Configuration을 설정했다면 이 글이 필요가 없긴하다.. 이미 알고있을태니.. 작성을 시작했으니 그냥 간단하게 작성은 하는 걸..
가끔가면 Archive가 끝나고 창이 안보일때가 있는데 창을 다시 열려고하면 안보인다... 이유는 해당 창 이름이 Organizer이기 때문이다. Xcode 상단 메뉴 -> Window -> Organizer 를 누르면 Archive 리스트 목록을 볼 수 있다.
안녕하세요. 오늘은 Storyboard가 아닌 코드 베이스로 프로젝트 생성하는 방법을 알아보도록하겠습니다. 우선 프로젝트는 UIKit으로 평소대로 생성을 해주세요. 삭제하기 위한 'Main' Storyboard를 선택하고 삭제를 수행해주세요. 이 상태로 실행하게되면 에러가 발생하기 때문에 다음 절차를 진행합니다. info.plist로 와서 Storyboard Name을 삭제해줍니다. 여기까지만해도 실행은 가능합니다. 이제 마무리 작업만 진행하면됩니다. [Target -> Build Settings -> All/Combined -> Storyboard(검색) -> UIKit Main Storyboard File Base Name]를 지워줍니다. 이런 모습이 되면 이제 코드를 작성해야합니다. func sce..
import FirebaseAuth private func logout() { let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) } } 파이어베이스 Auth 인증 로그아웃 코드입니다. 로그인이 되었을 경우 사용 가능합니다. [iOS/Swift] Firebase Auth 로그인 여부 확인 코드 (tistory.com) [iOS/Swift] Firebase Auth 로그인 여부 확인 코드 // 로그인 정보 확인 if let user = Auth.auth().currentUser { print("로그인..
파이어베이스 Auth 로그인 확인 import FirebaseAuth func checkLogin() { // 로그인 정보 확인 if let user = Auth.auth().currentUser { print("로그인 유저입니다.") // 로그인 이메일이 있는지 확인하는 코드 let email = Auth.auth().currentUser?.email ?? "이메일 null" // 메인 화면 진입 } else { print("로그인이 필요합니다.") // 로그인 화면 진입 } } 위 코드를 통해서 로그인 여부를 확인할 수 있습니다. 중간에 email 확인 코드는 email 정보가 있는 사용자만 값이 들어있습니다. 없는 경우 null이니 예외처리를 진행하면 될 것 같습니다. 저는 해당 메소드를 통해서 로..
오늘은 FSCalendar 라이브러리에서 선택 가능할 날짜의 최대, 최소를 지정해주도록 하겠습니다. 최대를 지정하면 그 이상으로는 선택이 안되고 최소를 지정하면 그 이하 날짜로는 선택이 불가능해집니다. // 초기 작업 calendar의 DataSourece를 채택합니다. self.myFsCalendar.dataSource = self // MARK: - 캘린더 DataSource extension ViewController: FSCalendarDataSource { // 최소 선택 날짜 지정 func minimumDate(for calendar: FSCalendar) -> Date { // 오늘 날짜를 최소 날짜로 설정 return Date() } // 최대 선택 날짜 지정 func maximumDate..
import UIKit // MARK: - UINavigationController 생성 static internal func createNavigationController(controller: UIViewController) -> UINavigationController { // 실제 첫 화면이 되는 ViewController 인스턴스 생성 let childViewController: UIViewController = controller // NavigationController을 사용할 경우, ViewController를 rootViewController로 갖는 NavigationController을 생성해야한다. let parentNavigationController: UINavigationCon..
요약: 앱스토어 개발자 연동된 계정이 아닌 수동으로 프로비저닝 인증을 하는 경우 Custom을 통해서 배포를 진행한다. Xcode 앱스토어 배포 에러 Add a new account in the Accounts preference pane or verify that your accounts have valid credentials. xcode couldn't find any ios app development provisioning profiles matching xcode no profiles for were found 이번에 Xcode 15로 업데이트하면서 Organizer 화면이 변경되었습니다. 저는 개인 프로젝트는 당연하게 메뉴에 적혀있는 대로 TestFlight & App Store로 배포를 진..
Root View를 변경하기 위해서 사용했던 코드 두가지 방법을 공유합니다. 설명은 따로하지 않고, 제가 기록용으로 남기기 위해서 작성해둡니다. 응용을 통해서 원하는 방식으로 구현하세요...! import UIKit // MARK: - UIWindow의 rootViewController를 변경하여 화면전환 internal func changeRootViewController(newStoryboard: String, nextViewController: String) { DispatchQueue.main.async { let newStoryboard = UIStoryboard(name: newStoryboard, bundle: nil) let newViewController = newStoryboard.in..
Xcode를 통해 개발을 완료하고 앱을 배포하려면 앱스토어에 등록을 진행해야한다. 그러기 위해서는 앱스토어에 등록하기 위한 앱을 생성해줘야한다. 그 절차를 개발자 센터에서 진행할 수 있다. (기억으로는 이 절차가 없어도 Xcode를 통해 Archive하면 자동 등록되었던 것 같은데... 그게 아니라면 개발 단계에서 Capabilities같은 옵션을 만지다가 어느순간 등록했을 수도 있다.. 내 머리속 지우개) 일단 방법은 간단하다. 개발자 센터에서 로그인하고 앱 메뉴로 이동해준다. Account - Apple Developer 로그인 - Apple idmsa.apple.com 들어가면 내가 볼 수 있는 앱 목록이 나타단다. 당연하게 + 버튼을 눌러서 '신규 앱'을 선택해준다. 그럼 이제 신규 앱의 기본 정..
Apple Developer Apple Developer Apple 플랫폼에서 개발할 절호의 기회입니다 developer.apple.com 애플 개발자 센터에서 Identifiers 메뉴로 이동하고 바로 보이는 + 버튼을 눌러서 ID 등록 절차를 진행한다. 상단에 App IDs를 선택하고 'Continue' 버튼을 눌러준다. 유형은 App ID를 등록할 예정이니 App을 누르고 'Continue'를 눌러준다. Description - 앱을 알아볼 수 있게 이름을 작성하든한다. Bundle ID - 프로젝트에서 사용하는 혹은 사용할 예정인 Bundle ID를 입력해준다. Capabilities/App Services - 사용할 옵션과 서비스이다. 나중에 다시 설정 가능하다. Explicit - 단일 앱 번..
안녕하세요. 이번에는 Xcode에서 iOS 프로젝트를 생성하도록 하겠습니다. Xcode를 처음 실행하면 버전과 프로젝트 생성 및 불러오기를 진행할 수 있습니다. 맨 위 프로젝트 생성 메뉴를 선택해서 넘어갑니다. 1. 새로운 프로젝트 생성 2. Git에서 프로젝트 Clone 3. 맥에 존재하는 프로젝트 불러오기 프로젝트 템플릿을 고를 수 있습니다. iOS, iPad 앱을 만들기 위해서는 iOS -> App을 선택해주세요. Product Name: 프로젝트 이름을 설정합니다. Team: 소속한 Team을 선택합니다. 애플 아이디가 로그인되어있다면 선택 가능한 팀이 보일 것 입니다. Organization Identifier: 보통 소속된 도메인에서 www를 빼고 역순으로 작성합니다. 없어도 비슷하게 양식 맞..