let us Go! 2018 Spring에 갔다 와서

let us: Go! 2018 Spring에 가서 적은 메모

18년 3월 10일 토요일에 있었던 let us: Go! 행사에 갔다 와서 정리한 것들이다.

초보 iOS 개발자를 위한 앱 배포하기!

아실 님

  1. 인증서 Status를 읽고 인증서 새로 설정
  2. 아카이브 할 때 Edit scheme을 눌러 Debug 대신 Release 버전으로 변경 뒤 해야 함.
  3. Archive 된 파일을 Upload to Store를 누르면 세 가지 옵션이 나오게 됨.
  4. 업로드 도중 중간에 에러가 뜨는 경우는 블루투스 사용 문구 등 필수적으로 들어가야 할 항목들이 빠져 있는 경우이다. 이 검사는 iTunes Connect에 들어가서 하게 되는데 이 때 실패하는 경우에는 에러 로그가 뜨지 않고 빌드된 것이 사라지게 된다.
  5. App Store 항목에서 앱에 대한 각 정보를 적는다. 여기서 앱 심사 정보에서 어떤 기능을 업데이트 하는지에 대해 적는 데 만약 로그인하는 기능이 들어있다면 test 계정을 적어줘야 함. 또 기기와 통신하는 앱일 경우 기기를 조작하는 영상을 URL로 보내주면 됨. 가끔 기기를 보내야 하는 경우도 존재할 수 있음…
  6. 버전 출시는 언제 버전을 출시할 지 결정하는 것으로 귀찮더라도 ‘수동으로 버전 출시’를 하는게 낫다.
  7. 심사를 한 뒤 리젝을 당했을 경우 활동 내역에서 그 사유를 확인할 수 있다. 만약 회신할 것이 있다면 밑의 칸에 자세히 적으면 된다.

느낀 점

조금 아는 내용도 있었지만 새롭게 알게 된 내용도 많았다. 앱 개발도 어렵지만 앱스토어에 배포하는 것이 너무 어렵다는 생각이 다시금 들었다. 나중에 발표 자료가 나오면 한번 더 공부 해야겠다는 생각이 들었다.

Functional Programming이 뭐하는 건가요?

곰튀김 님

함수형 프로그래밍 패러다임은 예전부터 존재해 왔다. 다음과 같은 특징을 보인다.

  • Immutable한 값을 사용하자.
  • 순수함수(값은 파라미터로, 동일한 입력으로 동일한 결과로)를 사용하자.
  • 함수를 ‘일급 객체’로 취급.
  • Lazy Evaluation
  • High-Order Function(고차 함수)
  • Recursing(재귀) — 꼬리에서 재귀를 사용해 최적화하자.
  • Currying

하지만 이런 특징들은 본질적인 FP의 의미를 말해주지는 않는다.

FP는 No Side-Effect인 프로그래밍이다.
Side-Effect가 없는 것이 무슨 의미일까?

  • Modularization / Stateless: OOP에서는 state, method가 모여 Object를 이루고 이는 하나의 모듈임. 그러나 FP에서는 function 하나가 모듈이 되고 상태를 저장하지 않음.
  • Imperative(How?) 명령형 vs Declarative(What?) 선언형
    함수 외부에 있는 값들을 바꾸지 말자.

결론적으로는 OOP와 FP를 같이 써야 함.

느낀 점

최근에 Rx를 조금 공부해 봤는데 함수형 프로그래밍을 아직 잘 몰라서 세션을 정말 열심히, 재미있게 들었다. 꼬리 재귀, Currying 등의 개념은 다시 공부해 보려고 한다. 세션의 코드를 보니 정말 멋지다는 생각이 많이 들었다.

iOS 개발자가 재미있어할 수도 있는 “Android”의 환경(개발, 마켓)

박성환 님

안드로이드의 문제점

  • 파편화: 타겟 OS, 타겟 모델을 정해서 개발을 하게 됨.
  • 보안이 취약함: Java 언어의 특성상 디컴파일이 거의 완벽히 됨. 리버스 엔지니어링이 잘 이루어짐.

느낀 점

Android와 iOS를 잘 비교해 주셨다. 말씀을 되게 재밌게 해주셔서 메모도 많이 못했다… 무엇보다 안드로이드 앱의 코드를 바로 볼 수 있다는 것이 놀라웠고 Java의 특성에서 기인했다는 것이 또 신기했다.

The Sandbox Container Directory

giftbot 님

Sandbox는 앱의 권한을 제어해 iOS 시스템의 보안을 유지한다. 앱은 앱 고유 영역에서만 활동이 가능하다.

샌드박스 안에는 Bundle, iCloud, Data 컨테이너가 있다.

Bundle

  • CodeSignature : 외부인으로부터 코드의 수정을 방지.
  • Frameworks

    Data

  • 기본 디렉토리: Documents, Library, Temp
    사용자가 직접 디렉토리를 추가하거나 삭제 불가.
Documents
  • 유저가 앱을 통해 생성한 문서나 데이터, 또는 외부 앱을 통한 파일을 저장.
  • 유저가 다루는 컨텐츠와 관련 있는 파일들만 저장.
  • UIFileSharingEnabled를 true로 사용해 Files와 iTunes를 통한 파일 확인 가능.
Library
  • 유저에게 노출되지 않지만 앱에 필요한 파일들 저장. Application Support, Caches 등이 있다.
  • Application Support는 CoreData의 기본 저장 경로이다.
  • Caches에는 앱의 속도, 데이터 절약 등을 위해 사용한다. 필요하면 쉽게 재성성, 다운로드 받을 수 있는 파일들이 저장된다. 앱이 실행 중에는 삭제되지 않는 것이 보장되며 백업은 되지 않는다. Caches/Snapshots에는 앱이 백그라운드로 넘어갈 때 저장되는 앱의 스냅샷을 저장하는 디렉토리이다. 만약 민감한 정보가 있을 때는 Cover Screen을 다른 것으로 교체해서 사용하면 된다.
  • Preferences에는 앱의 설정 정보가 저장되며 대표적으로 UserDefaults가 있다.
tmp(Temporary)

현재 앱 실행 중에는필요하지만 다음에는 필요가 없는 것들이 저장됨.

네트워크로 이미지를 요청할 경우 먼저 Library/Caches에 이미지가 있는지 확인하고 있다면 바로 메모리에, 없으면 요청해 올린다. Do not backup attribute키는 백업하지 말아야 항목이 있을 경우 사용.

느낀 점

이 세션 역시 꼭 듣고 싶었다. 시뮬레이터로 확인하면 여러 폴더가 있는 것을 볼 수가 있는데 각각 어떤 역할을 하는지 잘 몰랐기 때문에 궁금하던 터였다. 작년 Swift Meetup 때 들었던 시뮬레이터 세션도 정말 신기하게 봤는데 이번에도 좋은 주제로 해주셔서 감사하게 들었다. 그리고 더불어 Core한 영역까지 공부해야겠다는 생각이 많이 들었던 세션이었다.

Haptic Feedback으로 시작하는 iOS 개발의 이모저모

구범모 님

Vibration

kSystemSoundID_Vibrate 4095 값을 주어 진동 값을 제공(iOS 6 이전)
Taptic Engine이 나온 이후에는 1519, 1520, 1521, 1102, 1107을 주어 다양한 진동이 제공됨.

Haptic Feedback Generator가 언제?(제대로 못들었다…) 부터 나옴.

  • UINotificationFeedbackGenerator: 특정 행동이 성공, 실패 등을 알려줄 때 사용.
  • UIImpactFeedbackGenerator: 아이템을 먹거나, 부딪혔을 때의 효과.
  • UISelectionFeedbackGenerator: picker의 휠을 돌릴 때의 효과.
    공통적으로 prepare()로 준비를 한 뒤, 필요가 없을 경우 reference를 nil로 해줘야 Taptic engine이 idle 상태로 가게 됨.

Sound

사운드 파일 URL을 통해 새로운 시스템사운드를 AudioServiceCreateSystemSoundID 메서드를 통해 만들어 사용할 수 있음.

Pasteboard

A 앱에서 복사를 한 값을 B에서 가져올 수 있음.

Custom Font

  1. 폰트 파일을 준비해서 프로젝트 네비게이터에 넣어주기.
  2. 프로젝트 설정 가서 번들에 제대로 넣어져 있는지 확인.
  3. plist 가서 지원하는 폰트 이름 적어주기.
  4. Mac 시스템에서 폰트 지원 이름을 파악하기.

Code Snippets

  • App Version: CFBundleShortVersionString, CFBundleVersion 키 값을 통해 version을 스트링으로 가져올 수 있다.
  • Network Activity Indicator: 네트워크가 돌아갈 때 상태 바에서 돌아가는 것.
  • Handoff: NSUserActivity(activityType:)을 통해 설정.
  • Volume & Airplay: MPVolumeView를 적용하면 시스템볼륨 조절 뷰가 나타나지 않게 됨.
  • Color & Image Literal: Literal로 바로 설정이 가능.
  • Image Slicing

Tools

  • Radar: 애플에 버그 리포트를 할 수 있음.
  • Code Snippet Library: 코드 스니펫을 미리 만들어 둘 수가 있음. 발표할 때 유용하게 사용.
  • Storyboard Preview
  • Network Link Conditioner: 네트워크 상황을 설정할 수 있음.

느낀 점

iOS의 다양한 것들에 대해 두루 알 수 있었던 세션이었다. 많은 것들을 직접 적용해 보며 익혀야 겠다. 더불어 나중에 발표할 때 Code Snippets을 꼭 써보고 싶었다.

kor45cw 님

appID: (app_prefix).(app_identifier)

paths: 허용하거나 허용하지 않을 주소 목록

안드로이드는?
App Link를 사용해 절차대로 따라하면 됨.

느낀 점

잠깐 한 눈 판 사이에 끝나버린 세션이었다… 지난 번 프로젝트에서 앱 연결할게 있어서 링크에 관해서 조금 알아본 기억이 있어서 좀 더 정리를 해야겠다.


후기

스태프로 운좋게 신청이 되어 갔다 온 18년의 첫 행사였다. 단톡방에서 보던 분들도 많이 알게 되었고 무엇보다 좋은 말씀, 좋은 에너지를 얻게 된 것 같아 감사한 하루였다. 더욱 성장하고 싶다.