Platforms State of the Union

인생노잼시기·2021년 6월 10일
0

🍎WWDC21

목록 보기
2/2

Xcode Cloud 와 Xcode13

https://developer.apple.com/documentation/Xcode/Xcode-Cloud

지속적인 통합과 배포 서비스를 제공한다고 한다.
TestFlight가 앱을 빌드하고 배포하면
테스터가 App Store Connect를 통해 피드백을 보낼 수 있다.
Code Signing in the Cloud 앱 서명을 최신으로 만들어준다고 한다.

현재는 베타 버전이 나와있으며
가격과 일정은 가을에 정해진다고 한다
내년(2022)에 상용 버전이 나올 거라고 한다.

▼ 베타버전 신청하는 링크 ▼
https://developer.apple.com/xcode-cloud/beta/


스위프트 언어

Concurrency

async/await

함수가 호출되면 await키워드를 사용해 async 함수의 결과를 기다리는 동안 다른 작업을 할 수 있다

func loadImage(at url: URL) async -> Image
let image = await loadImage(at: url)

warm up - fetch stage scenery - set stage

completion handler를 사용한 예시

func prepareForShow(completion: @escaping (Result<Scene, Error>) -> Void) {
	danceCompany.warmUp(duration: .minutes(45)) { result in
    	switch result {
        	case .success(let dancers):
            	self.crew.fetchStageScenery { scenery in
                	self.setStage(with: scenery) { openingScene in
                    		dancers.moveToPosition(in: openingScene) { result in
                        		completion(result)
                        }
                    }
                }
            case .failure(let error):
            	completion(.failure(error))
        }
    
    }
}

async/await를 사용한 예시

func prepareForShow() async throws -> Scene {
	let dancers = try await danceCompany.warmUp(duration: .minutes(45))
    let scenery = await crew.fetchStageScenery()
    let openingScene = setStage(with: scenery)
    return try await dancers.moveToPosition(in: openingScene)
}

//조건 추가
func prepareForShow() async throws -> Scene {
	let dancers = try await danceCompany.warmUp(duration: .minutes(45))
    let scenery = isStudioRehearsal? await crew.fetchPracticeScenery() : await crew.fetchStageScenery()
    let openingScene = setStage(with: scenery)
    return try await dancers.moveToPosition(in: openingScene)
}

Structured Concurrency 구조적 동시성

동시성 코드의 추론이 쉬워진다
async let/ await
부모 작업과 동시적으로 실행되는 자식 작업을 생성

func prepareForShow() async throws -> Scene {
	async let dancers = danceCompany.warmUp(duration: .minutes(45))
    async let scenery = crew.fetchStageScenery()
    let openingScene = setStage(with: await scenery)
    return try await dancers.moveToPosition(in: openingScene)
}

Actors

안전한 동시성 프로그래밍 모델
상호 배타적 접근만을 제공해서 고유의 상태를 보호하는 오브젝트

동시성 프로그램에서 공유 상태를 안전하게 모델링해준다

  1. 액터 도입 전
    클래스 내의 인스턴스 속성이 연속적인 디스패치 큐를 사용해 접근해 상호 배타성을 유지합니다.
    인스턴스를 수동으로 생성해야 한다.
class StageManager {
	var stage: Stage
    let queue = DispatchQueue(label: "stage")	// 수동으로 인스턴스 생성
    
    func setStage(with scenery: Scenery, completion: @escaping (Scene) -> Void) {
    	queue.async {	// 수동으로 인스턴스 생성
        	self.stage.backdrop = scenery.backdrop
            for prop in scenery.props {
            	self.stage.addProp(prop)
            }
            completion(self.stage.currentScene)
        }
    }
}
  1. 액터 도입 후
    액터가 자신의 설정에 직접 접근할 수 있고(자동으로 접근 동기화)
    액터와의 외부 상호작용은 async/await를 사용해 상호 배타성을 보장한다
actor StageManager {
	var stage: Stage
    
    func setStage(with scenery: Scenery) -> Scene {
        stage.backdrop = scenery.backdrop
        for prop in scenery.props {
            stage.addProp(prop)
        }
        return stage.currentScene
        
    }
}

let scene = await stageManager.setStage(with: scenery)

@MainActor

현재 메인 스레드 비동기를 위해 수동으로 코드 작성했지만
DispatchQueue.main.async

앞으로는 @MainActor 어노테이션만 붙이면 된다

@MainActor
func display(scene: Scene)

await display(scene: scene)	//함수 호출

비동기 API의 변화

save라는 API처럼 이미 비동기로 작성된 많은 API가 SDK를 점검해 비동기 API가 async/await를 사용 가능하게 된다

func save(_ object: HKObject, withCompletion competion: @escaping (Bool, Error?) -> Void)func save(_ ojbect: HKObject) async throws

async/await의 활용

URL 작업이나 비동기 I/O 작업에 사용할 수 있고
파일 전체의 라인별 비동기적 반복 처리를 지원한다

for try await line in url.lines {
	// process each line
}

프레임워크

SwiftUI

앱의 순환 주기를 설정하기 위한 API

swiftUI로 앱을 만들면 처음에 이렇게 나오는데 이게 그 뜻이구나
액세스 포인트인 메인 함수가 내 앱에 접근하면 윈도우에 Hello, world!를 보여준다는 뜻이었구나

@main
struct MyApp: App {
	var body: some Scene {
    	WindowGroup {
        	Text("Hello, world!")
        }
    }
}

SwiftUI의 개선사항

SDK

이 Mac에 관하여 -> 시스템 리포트 -> 소프트웨어 -> 개발자

Xcode를 설치하면 여러가지 sdk가 다운받아지는데
나는 주로 iOS의 SDK를 사용한다.
프레임워크와 내장된 API, 디버거 등을 포함한 소프트웨어 개발 툴을 활용해 개발을 한다고 생각하면 된다.

아이패드에서 플레이그라운드로 앱 생성이 가능해졌다


AR

RealityKit

Object Capture로 3D모델 생성하기


52분~

Focus

profile
인생노잼

0개의 댓글