본문으로 건너뛰기

#ios

jevtypesafellmai-workflowstructured-outputnextjsapp-routerrscserver-actionsarchitecturetypescriptmonorepoturborepobuild-performancereactssrhydrationroute-handlertanstack-querycachingroutingproxycdnreact-19react-server-componentsserver-statebrowser-renderingcsrdomreact-domrenderingexpoeastestflightioscode-signingclaude-codeeslinthookslintautomationseoopen-graphnoindexrobots-txtpnpmworkspacedependency-managementcatalogvercelawsamplifyecsfargatedeploymentuse-idcreate-portalcreate-rootcookiehttp-onlycsrfxsrf-tokensame-siteweb-securitymiddlewarerewritessosloauthenticationidpfrontendbffresize-observercss-variablesperformancevariancetype-safetystrict-function-typescovarianceimage-optimizationbrowser-image-compressionjszipweb-workerfrontend-performancepostmessagereact-hook-formbrowser-apinext-jshealthkitswiftworkoutapple-watchwatchosuseeffectrenderanti-patternsemverpackage-managementpythonvenvvirtual-environmenttroubleshootinggpspedometerlive-activityreact-nativeauto-pauseremote-controlmobile-developmentweb-sessionproductivityrtktoken-optimizationfigma-apideveloper-toolsinfrastructuremermaidmdxdiagramaws-s3presigned-urlfile-uploadhmacsecurityagentic-looptoken-flowprompt-cachingshell-scriptfigmacliskillagentresponsive-publishingcontext-windowsubagentteammulti-agentai-collaborationpublishingclaude-mdmemoryhistory-apiformxcodewidgetswiftuiapp-groupsandboxhtmlaccessibilitya11ynice-authpost-vs-getcallbackin-app-browserssgstatic-site-generationgetstaticpropsgetstaticpathscsscontainbrowserjavascriptanimationlerplinear-interpolationrequestanimationframecode-splittingreact-lazydynamic-importpreloadingreflowrepaintcomposite-layertransformwill-changeimage-uploadmobile-webdocusaurusmintlifydocumentationopenapistatic-site-generator3d-transformperspectivetransform-stylesearch-consolesitemapmetadatacanonicaljsxtranspileastvirtual-domreconciliationsynthetic-eventfluxdeclarativeimmutabilityfrontend-historymvcmvvmjquerybackboneswiperoauthuser-agent-detectionpost-messagesession-storageisrcache-controlroute53dnsdomaintxt-recordintersection-observerinfinite-scrollchat-uiscroll-behaviorvpcec2iamcloud-basicsperformance-nowdom-high-res-timestampmonotonic-clockuser-timing-apinode-perf-hooksjenkinsci-cdgithub-webhookkubernetesdockercicdcontinuous-integrationcontinuous-deliverycontinuous-deploymentdevopsdata-structuremapsetgitgithubforkcloneversion-controloss-contributiongenericstype-systemkeyofinterfacegit-branchremotepruneclosurelexical-scopeexecution-contextdeep-divelexical-environmenthoistingscopethisbindingcssomrender-treetcpfirst-class-objectfunctionargumentsvarletconsttype-aliasreduxredux-toolkitstate-managementmouse-eventdrag
Article

EAS staging 프로필과 TestFlight dev 서버 배포 구조 정리

TestFlight 빌드 목록에 preview 빌드가 없던 이유를 파고들어, 서명 축과 환경 축을 갈라놓은 staging 프로필로 정리했다.

READ MOREREAD MORE→
Article

HealthKit API 완전 정복 — Workout 트래킹 관점에서 본 API 비교

iOS 러닝 앱을 만들면서 HealthKit API 이름들이 너무 비슷해 길을 잃었다. 다음에 또 헤매지 않으려고 한 번 정리한 학습 일지다.

READ MOREREAD MORE→
Article

iOS 러닝 앱 측정 기능 구현 회고

iOS 러닝 앱 개발 중 마주친 Auto-Pause, GPS/Pedometer 이중 거리 측정, 위젯 동기화, 백그라운드 처리 등 실제 트러블슈팅 10가지를 정리한 회고.

READ MOREREAD MORE→
Article

iOS 빌드 서명 및 위젯 중복 등록 트러블슈팅

EAS Production 빌드에서 부딪힌 서명 충돌, appex 중복 등록, 위젯 상태 동기화 버그를 어떻게 풀었는지.

READ MOREREAD MORE→
Article

Live Activity (위젯) 트러블슈팅

iOS Live Activity 위젯에서 부딪힌 타이머 동기화, 딥링크, 백그라운드 auto-pause 이슈를 어떻게 풀었는지.

READ MOREREAD MORE→
Article

Live Activity 추가 후 Xcode 아카이브 및 배포 에러 트러블슈팅

Live Activity 익스텐션 타겟을 추가한 뒤 무너진 프로비저닝 파이프라인을 EAS 원격 빌드로 다시 세운 일지.

READ MOREREAD MORE→
Article

React Native에서 Live Activity를 구현하며 이해한 App Group, Sandbox, AsyncStorage 정리

러닝 앱 PIRL에 Live Activity와 위젯을 붙이면서 왜 AsyncStorage만으로는 안 되는지, App Group이 왜 필요한지 이해한 과정을 정리했다.

READ MOREREAD MORE→