potatotips#55 참가 보고서(iOS)

14600 단어 SwiftpotatotipsiOS
potatotips#55가 iOS 블로그 상자로 참여했기 때문에.
iOS 발표 내용을 요약했습니다.
https://github.com/potatotips/potatotips/wiki/potatotips-55
나는 지식이 부족하다
이 가능하다, ~할 수 있다,...
지적할 점이 있으면 알려주세요

iOS 11 이후 UI V i e w C on t r o ller Transition Coordinator로 제작된 애니메이션이 처음 재생되는 경우에만 작동하지 않는 문제


발표자


kazuhiro4949선생님

슬라이드 쇼


참고 자료


https://qiita.com/kazuhiro4949/items/e8df2a904cb994ce6ecc
https://github.com/kazuhiro4949/UIViewControllerTransitionCoordinatorBug

개요


UIViewControllerTransitionCoordinator


사용자 정의 점프 부분을 쓰지 않아도 애니메이션이 잘 이루어져 편리하다.

그런데 iOS 11 이후에 이상한 행동을 발견했어요.


애니메이션 화면 변환은 시작 후 첫 번째 변환에서 애니메이션 후의 상태를 먼저 표시합니다.

사실은 iOS의 구린내 나는 벌레야.


해결책


처리를 고스란히 사용자 정의 다이빙으로 옮겨 진행하면 문제가 없을 것이다.

Embedded Unity


발표자


tanakasan2525선생님

슬라이드 쇼


참고 자료


개요


UI(Unity)


로컬 UI가 아닌 자체 UI로 구현됩니다.
Unity UI를 로컬 UI에 포함시키는 것은 매우 어렵다
로컬 애플리케이션에 Unity 포함

Unity iOS 구축 프로세스


1. C#의 코드를 C#의 컴파일러를 통해 관리 조립하기
2. 최적화
3. IL2CPP를 통해 C++ 코드로 변환
4. Clang에서 iOS에 구축할 바이너리
이렇게 하면 유닛의 뷰를 끌어올리기만 하면 좋아하는 곳에 유닛의 화면을 띄울 수 있다

Embeded framework 만들기


Unity에서 생성된 Xcode용 항목입니다.mm 하우스.h 파일은 기본적으로 모두 복사되어 있습니다(Unity의 구조를 잘 모릅니다...)
  • 프레임 워크 외부에서 사용되는 Header를 Public
  • 로 설정
  • .xcconfig 파일 리셋 프로젝트 설정 만들기https://gist.github.com/tattn/d779acc86b7cd32996860f5fe97104c4
  • 경로를 바꾸거나 extern "C"등을 추가
  • ※ 끼워 넣을 때 자동으로 생성되는main.참조 가능 mm

    iOS 및 Unity 대화


    UnitySendMessage를 사용하여 Unity에 데이터 전송
    http://kan-kikuchi.hatenablog.com/entry/Safety_UnitySendMessage

    iOS에 대한 HTTP 캐시 정보


    발표자


    jpmartha_jp선생님

    슬라이드 쇼


    개요


    API의 응답에 업데이트 내용이 즉시 반영되지 않아 iOS 측이 의혹을 받고 있다.
    나는 그곳에서 현금에 관한 많은 물건을 조사했다.
    전제: 캐시는 성능을 향상시키는 데 필수적이다

    iOS를 사용하지 않고 캐시를 읽는 방법


    CachePolicy 변경
    
    let configuration = URLSessionConfiguration.default
    configuration.requestCachePolicy = .reloadIgnoringLocalAndRemoteCacheData
    
    ※ 사실은.r e l oa d I g o r i ngLocal AndRemoteCacheData가 지원되지 않음
    https://developer.apple.com/documentation/foundation/nsurlrequest/cachepolicy/reloadignoringlocalandremotecachedata

    Cache Policy 설정만 캐시를 읽을 수 없습니다.💾보존💾


    시뮬레이터로 저장 위치를 확인한 후
    /Library/Developer/CoreSimulator/Devices/xxx/data/Containers/Data/Application/xxx/Library/Caches/(BundleID)
    라고 캐치했다.db를 만났어요.
    내용은 SQLite이며 도구로 볼 수 있습니다.

    하지만 읽지 않으면 되지 않겠는가?


    ->좋지 않은 개인정보 등이 누락되면 저장하지 말아야 한다
    대책으로 캐피티를 0으로 만드는 방법이 있는데 현금을 사용할 수 없을 것 같아요.

    불러오지도 저장하지도 않는 방법


    url Cache를 nil로 만들어주세요.
    let configuration = URLSessionConfiguration.default
    configuration.urlCache = nil
    
    ephemeral 사용
    let configuration = URLSessionConfiguration.ephemeral
    let session = URlSession(configuration: configuration)
    
    하지만 기존의 캐시가 아직 있기 때문에 삭제하는 방법을 찾아봤습니다.

    모든 캐시를 제거하는 방법(특정 캐시를 제거하는 방법은 성공하지 못함)

    URLCache.shared.removeAllCachedResponses()
    

    Pococha에서 자산 관리


    발표자


    noppe선생님

    슬라이드 쇼


    참고 자료


    https://github.com/noppefoxwolf/inaba
    https://github.com/noppefoxwolf/AppIconGen

    개요


    이번에 발표된 자산에는 코드가 포함되지 않았다.
    이미지, 색상, Storyboard 등.

    Pococha 자산 관리 규칙


    1. Asset Literal 사용 안 함


    Xcode에서는 비슷한 이미지와 색상을 구별하기 어렵습니다.
    -> 이름을 붙여서 부르는 게 좋겠어요.
    ->머리에 외모와 특징에 따라 지정할 수 있는 이름+공통적으로 사용할 수 있는 이름
    ->xcassets의 이름 공간을 활용하여 간단한 파일 이름으로 접근할 수 있음(Profile Edit/Triangle/Large 등)

    2. 문자열에서 에셋을 사용하지 않음


    Typo면 점심시간에 붕괴될 거야.
    ->R.swift 및 Swift Gen 등을 컴파일할 때 Type 확인

    3. Interface Builder에서 이미지를 설정하지 않음


    존재하지 않는 그림을 설정해도 실행 시간에 붕괴될 수 있습니다.
    -> IB에서 설정하지 않은 규칙 설정
    ->Inaba에서 확인(상기 참고자료 참조)
    IB에서 이미지를 제거하면 AutoLayout이 망가져요.
    -> Intrinsic conntent size 설정

    4. 애플리케이션은 단일 소스에서 생성됨


    Victor pdf에서 래스터 이미지를 구성할 때 Apria Icon이 자동으로 생성되지 않는 이유
    ->AppIconGen의 활용

    5. 가상 자산의 명확한 프로젝트 관리


    디버깅용 자산은 숨기기 어렵다.앱에 묶으면 다양한 문제가 발생할 수 있다.
    -> 각 기능에 대한 대상 만들기, 각 대상에 대한 xcassets 만들기

    How to use Dictionary.compactMapValues


    발표자


    d_date선생님

    슬라이드 쇼


    참고 자료


    https://github.com/apple/swift-evolution/blob/master/proposals/0218-introduce-compact-map-values.md
    https://speakerdeck.com/d_date/make-our-swift-better

    개요


    Dictionary.Swift5에서 commpactMapValues 가져오기(작성자는 발표자 d date)

    어떻게 사용합니까?

    let d1 = ["a","1","b","2","c",nil]
    d1.filter({ $0.value != nil}).mapValues({ $0! })
    // ["b":"2","a":"1"](順番は任意)
    
    이렇게↓
    let d1 = ["a":"1","b":"2","c":nil]
    d1.compactMapValues({ $0 })
    // ["b":"2","a":"1"](順番は任意)
    
    Javascript의lodash의omitBy를 참고했습니다.
    https://lodash.com/
    http://tacamy.hatenablog.com/entry/2018/03/04/005938

    어떻게 사용합니까?2

    let d = ["a":"1","b":"2","c":"three"]
    d.mapValues(Int.init).filter({ $0.value != nil}).mapValues({ $0! })
    // ["b":2,"a":1](順番は任意)
    
    이렇게↓
    let d = ["a":"1","b":"2","c":"three"]
    d.compactMapValues(Int.init)
    // ["b":2,"a":1](順番は任意)
    

    Swift 관리 방법은 다음을 참조하십시오.


    Continuous Delivery With Unity Command line arguments


    발표자


    DayBySay선생님

    슬라이드 쇼


    개요


    유닛 개발 중이시면...


    '공유 프로그램의 최신 버전'을 원하시는 분도 계세요.
    HockyApp을 통해 업로드합니다.

    유니티 빌딩


    시간이 오래 걸리다.
    그리고 업로드 과정에서 Unity Editor가 닿을 수 없습니다!!!

    Xcode 구축


    1~2분 더 걸려요.

    비극적


    내가 설정을 잘못했어...
    ->다시 유니티 빌딩에서

    따라서 Unity 구축 배포 자동화


    이번에는 사내 서버 구축기 + Jenkins로 구성되었습니다.

    Unity Player -> Xcode.proj의 토출


    Unity Command Line Arguments 사용

    -executeMethod


    빌드 시작 전(Unity 시작 시) 클립 처리
    명령행 매개변수 적용하기

    Xcode.proj 설정 변경


    fastlane은 상황에 따라 사용할 수 없습니다.

    [PostProcessBuild]


    Player 구축 후 협착 처리

    AVPlayer 주변 설계 tips


    발표자


    toshi0383선생님

    슬라이드 쇼


    참고 자료


    개요


    AVPlayer 주변 팩스

    방침.


    AVPlayer는 UI로 스냅되지 않습니다.

    ViewController가 AVPlayer를 유지하고 있다면


    코드가 흐트러지거나 다른 View에서 참조될 경우 ViewController를 거쳐야 합니다.

    원래 AVPlayer가 UI였나요?


    AVPlayer의 초기화와 조작은 메인 라인에 필수적인 미신이다
    ※ 단, KVO 등록은 주 스레드가 최선
    You can use Key-value observing (KVO) 
    to observe state changes 
    to many of the player’s dynamic properties, 
    such as its currentItem or its playback rate. 
    You should register and unregister 
    for KVO change notifications on the main thread.
    
    더구나
    검증이 필요한 것은 하위 스레드의 처리가 메인 스레드의 처리를 늦추어 영상 시청의 UX를 낮출 수 있다는 것이다.
    하지만 UI에 얽매일 필요는 없을 것입니다.

    비디오 플레이어 가져오기

  • UI 레이어에서 분리하면 시원해집니다.
    (RxSwift 활용을 통한 원활함)
  • 여러 종류에서 공통된player 조작을 할 수 있음
  • Mock 테스트가 쉬워졌습니다
  • Sourcery를 사용하여 이벤트 로그를 개선하면


    발표자


    _sgr_ksmt선생님

    슬라이드 쇼


    참고 자료


    개요


    iOS에 이벤트 로그 배치

    원시적 실현

  • 하드웨어 인코딩 이벤트 이름 및 매개변수 이름
  • 모델은 Any이기 때문에 무엇이든 넣을 수 있습니다
  • 정의 산란으로 인한 미로
  • 이거 개선해.

    개선 1


    이벤트 이름 및 매개변수에 Protocol 및 enum 사용

    결실

  • 정의된 컴파일링과 문자열 하드코딩의 감소
  • 운용형 추론이 안전해졌다
  • 스위프트 느낌의 실크룩이지만.
    매번 손으로 쓰는 이벤트명과 파라미터가 어려워요.

    개선


    Sourcery를 통한 자동 생성
    https://github.com/krzysztofzablocki/Sourcery

    결실


    200개 정도 되는 보일러판의 생성은 Sourcery를 사용하여 0.1-2초면 됩니다.

    좋은 웹페이지 즐겨찾기