Skip to content

Instantly share code, notes, and snippets.

@JCSooHwanCho
JCSooHwanCho / Combine+Cooldown.swift
Created September 2, 2023 13:48
Combine operator that mimics RxSwift's throttle when latest: false
extension Publisher {
func coolDown<S: Scheduler>(for cooltime: S.SchedulerTimeType.Stride,
scheduler: S) -> some Publisher<Self.Output, Self.Failure> {
return self.receive(on: scheduler)
.scan((S.SchedulerTimeType?.none, Self.Output?.none)) {
let eventTime = scheduler.now
let minimumTolerance = scheduler.minimumTolerance
guard let lastSentTime = $0.0 else {
return (eventTime, $1)
}
@skyofdwarf
skyofdwarf / remote-notification.md
Created December 12, 2022 14:20
리모트 노티피케이션 정리

시간이 흘러 이제 iOS 16이 나왔고, 이제는 iOS 10에 추가된 UNUserNotificationCenter를 이용해 로직만 사용하는게 당연하다. 하지만 레거시 코드들에는 사용하지 않는 예전 푸시 관련 코드들이 같이 남아 있어, 간만에 푸시작업을 할 떄마다 헷갈리게 만든다.

UIApplicationDelegate의 url-open 관련 메시지들도...

때문에 n년 후의 나를 위해 정리를 남긴다.

리모트 노티피케이션 사용 절차

  1. APNS 등록

    APNS에 기기등록을 위해 UIApplication.registerForRemoteNotifications 호출

  2. UI/사용자 상호작용을 위한 권한 등록
@skyofdwarf
skyofdwarf / PHPhotoLibrary-requestAuthorization-handler-not-called.md
Last active December 28, 2023 03:06
iOS 14>=, '선택한 사진' 권한 선택 시 handler 미호출 이슈 및 대응

iOS 14 >=, '선택한 사진' 권한 선택 시 handler 미호출 이슈 및 대응

이슈

PHPhotoLibrary.requestAuthorization(:_) 또는 PHPhotoLibrary.requestAuthorization(for:handler:) 로 사진권한 요구 시 사용자가 '사진 선택'을 고르면, 사용할 사진을 고를 수 있도록 시스템 이미지피커가 기본 모달스타일(UIModalPresentationStyle.pageSheet)로 뜨게 된다. 이 때 '취소/완료' 버튼을 누르면 전달한 handler가 호출되지만, 피커를 아래로 끌어당겨(pull to dismiss?) 닫게 되면 handler가 호출되지 않는 이슈가 있다.

같은 이슈의 질문을 찾았지만 같은 이슈를 고민하는 사람이 있다는걸로 만족.. https://stackoverflow.com/questions/65351479/phphotolibrary-requestauthorizationfor-handler-does-not-calls-handler-block

커스텀 앨범

커스컴 앨범처럼 PHAsset.fetchAssets(...)를 바로 호출할 경우 사진권한이 .notDetermined이면 자동으로 사진권한 요구팝업이 뜨게 되는데 이 때는 사용자가 확인/취소 버튼이 아닌 피커를 땡겨 닫아버려도(pull to dismiss) fetchAssets(...)가 빈 목록을 리턴할테고 이 빈 목록으로 UI로 대응이 가능할 것이다.

@pilgwon
pilgwon / TCA_README_KR.md
Last active June 19, 2024 08:24
TCA README in Korean

The Composable Architecture

The Composable Architecture(TCA)는 일관되고 이해할 수 있는 방식으로 어플리케이션을 만들기 위해 탄생한 라이브러리입니다. 합성(Composition), 테스팅(Testing) 그리고 인체 공학(Ergonomics)을 염두에 둔 TCA는 SwiftUI, UIKit을 지원하며 모든 애플 플랫폼(iOS, macOS, tvOS, watchOS)에서 사용 가능합니다.

@IanKeen
IanKeen / Example_Complex.swift
Last active January 23, 2024 07:53
PropertyWrapper: @transaction binding for SwiftUI to make changes to data supporting commit/rollback
struct User: Equatable {
var firstName: String
var lastName: String
}
@main
struct MyApp: App {
@State var value = User(firstName: "", lastName: "")
@State var showEdit = false
@IsaacXen
IsaacXen / README.md
Last active June 21, 2024 01:41
(Almost) Every WWDC videos download links for aria2c.
@ElonPark
ElonPark / reject.md
Last active May 31, 2017 07:25
애플 리젝 사항

PLA 1.2 리젝에 관하여

Apple의 메시지

  1. 10.0 Before You Submit: Program License Agreement (iOS) >
@atika
atika / iphone-simulator-app-folder.sh
Last active November 13, 2023 14:05
Open the iOS Simulator folder containing -user defaults- plists files for your Application
#!/bin/bash
appname="$1"
[ -z $appname ] && read -p "Application name : " appname
apppath=$(find ~/Library/Developer/CoreSimulator/Devices/ -name "$appname.app" -print -quit)
if [[ ! -z $apppath ]]; then
echo "Found path for $appname app"
echo -e "\033[1;30m$apppath\033[0m"
appbundle=$(osascript -e "id of app \"$apppath\"")
@romeoh
romeoh / gist:88c5e3b424566a3c62ef
Created October 17, 2014 03:33
ios url scheme
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title>KFT</title>
<link rel="stylesheet" type="text/css" href="./css/font-awesome.css">
<link rel="stylesheet" type="text/css" href="./css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="./css/common.css">
@justlaputa
justlaputa / jenkins-api.md
Last active May 17, 2024 14:53
Jenkins Json API

jobs

jenkins_url + /api/json?tree=jobs[name,color]

builds

jenkins_url + /job/${job_name}/api/json?tree=builds[number,status,timestamp,id,result]

last build