본문 바로가기
Skip

[Skip] Skip Framework 패키지 및 라이브러리

by 워뇨옹2 2024. 6. 28.
728x90
반응형

지난번에는 스킵 프레임워크로 작성한 코드를 빌드하고 Android, iPhone으로 각각 실행하는 것까지 진행해봤다.

이번에는 Package Dependency에 대해서 작성해보려고 한다.

현재 SKIP의 상황

이미 지난 포스팅에 짧게 적어놨듯이 현재 스킵 프레임워크는 얼리 어답터 수준의 개발 상태이며, 생태계 자체가 크지 않기 때문에 많은 서드파티 라이브러리가 존재하지 않는다.(사실 전무하다)

개발진이 만들어놓은 10개 남짓한 패키지가 전부이고, 만약 이것들이 본인이 원하는 기능을 지원하지 않는다면 Swift, Kotlin 각각 네이티브 라이브러리를 추가한 다음 코드를 두 번씩 써야하는 상황이 나올 것이다.

 

다행스럽게도 현재 개발진이 만들어놓은 자체 패키지만 사용해도 많은 기능을 구현할 수 있다.

물론 Alamofire, Kingfisher같이 쉽고 성능 좋은 라이브러리를 사용하지 못한다는 것이 아쉽지만, URLSession, AsyncImage 같은 것들로도 충분히 구현할 수 있기 때문에 크게 문제가 되지는 않을 것 같다.(사용해도 되지만, 코틀린으로도 똑같은 기능을 한 번 더 써야하기 때문에 효율이 별로일듯)

 

URLSession은 심지어 WebSocket까지도 구현을 해놨기 때문에, 채팅 앱도 어렵지 않게 구현할 수 있을 것으로 보인다.

또 많이 사용하는 Lottie 역시 자체적으로 준비를 해뒀다....

 

정말 너무 사랑스러운 프레임워크가 아닐 수 없다.

다만 개발자들이, 기업들이 얼마나 이 프레임워크에 관심을 가져줄지가 걱정이다.

 

개발자 추세만 보더라도 안드로이드 개발자가 압도적으로 많은 상황이고(물론 미국은 좀 예외지만), 플러터 리액트라는 대안이 있는 상황에서 생전 처음보는 Swift를 사용해야한다면 이게 과연 쉬울까(물론 Swift는 쉬운 언어다. 좀만 배우면 누구나 할 수 있다.)

 

기존에 크로스 플랫폼을 지원하는 앱들은 분명 Flutter, React Native를 사용하고 있었을텐데 이것을 버리고 Skip으로 이전한다?

아직 정식 출시도 되지 않은 프레임워크를 사용해 새로운 서비스를 만든다?

 

물론 이건 두명에 불과한 Skip Founder들이 얼마나 Skip을 사랑하고, 얼마나 많은 시간을 할애하고, 발전시킬지에 따라 달라질 문제이긴하다. 나는 그 분들이 지치지 않고 계속 Skip을 발전시켜줬으면 하는 바람이다.

Skip Packages

지금 자체 패키지는 총 13개가 존재한다.

여기서 아마 우리 개발자들이 많이 사용하게 될 패키지는 SkipFoundation, SkipModel, SkipUI, SkipKit, SkipFirebase 정도가 될 것 같다.

각각 어떤 종류의 패키지고 무슨 기능을 지원하는지는 직접 방문해서 확인하는게 빠를것 같으니 직접 공식 홈페이지에 들어가보자.

 

프로젝트를 생성하면 기본적으로 몇가지 패키지는 바로 사용이 가능하다.

그런데 만약 Lottie를 사용해야하는 상황이라서 SkipMotion이 필요하다면, 당황스럽다. 왜 없지?

걱정하지 말자. 프로젝트 폴더에 있는 Package.swift파일을 약간 수정해주면 된다.

파일을 오픈해보자.

let package = Package(
    name: "example-app",
    defaultLocalization: "en",
    platforms: [.iOS(.v16), .macOS(.v13), .tvOS(.v16), .watchOS(.v9), .macCatalyst(.v16)],
    products: [
        .library(name: "ExampleApp", type: .dynamic, targets: ["ExampleApp"]),
    ],
    dependencies: [
        .package(url: "https://source.skip.tools/skip.git", from: "0.8.55"),
        .package(url: "https://source.skip.tools/skip-ui.git", from: "0.0.0")
    ],
    targets: [
        .target(name: "ExampleApp", dependencies: [.product(name: "SkipUI", package: "skip-ui")], resources: [.process("Resources")], plugins: [.plugin(name: "skipstone", package: "skip")]),
        .testTarget(name: "ExampleAppTests", dependencies: ["ExampleApp", .product(name: "SkipTest", package: "skip")], resources: [.process("Resources")], plugins: [.plugin(name: "skipstone", package: "skip")]),
    ]
)

 

파일을 열고 코드를 확인하면 위와같이 코드가 작성돼있을거다. 그럼 우리는 dependencies와 targets에 약간의 수정을 줘서 SkipMotion 패키지를 사용할 수 있다.

 

dependencies는 다음과 같이 바꿔주자.

    dependencies: [
        .package(url: "https://source.skip.tools/skip.git", from: "0.8.55"),
        .package(url: "https://source.skip.tools/skip-ui.git", from: "0.0.0"),
        .package(url: "https://github.com/skiptools/skip-motion.git", from: "0.2.0")
    ],

현재 지원하는 버전은 0.2.0이기 때문에 0.2.0을 넣어주었다.

그 후에 빌드를 해주면 네비게이션바 하단 Package Dependencies에 원래 없던 skip-motion 0.2.0 패키지가 생긴다.

 

그럼 다음으로 targets를 다음과 같이 수정해주자.

targets: [
        .target(
            name: "TestApp",
            dependencies: [
                .product(name: "SkipUI", package: "skip-ui"),
                .product(name: "SkipMotion", package: "skip-motion")],
            resources: [.process("Resources")],
            plugins: [.plugin(name: "skipstone", package: "skip")]),
            /////////

그 후 다시 빌드를 해주면

이렇게 SkipMotion이 추가된 걸 볼 수 있다.

 

다른 패키지도 마찬가지의 방법으로 진행해 추가해주면 된다.

주의사항

사소하지만 주의해야할 점이 있는데, 해당 패키지를 추가하지 않은채로 패키지의 함수등을 코드에 넣어놓고 나중에 빌드를 돌리면 빌드 에러가 난다.

그러면 그 부분을 다시 지우고 패키지를 추가하고 다시 작성해야하기 때문에 필요한 패키지가 있다면 코드를 쓰기 전에 미리 추가해두고 패키지에 있는 기능들을 사용하도록 하자.

서드파티 라이브러리

이번 포스팅에서 서드파티 라이브러리는 다루지 않을 생각이다. 앞서 말한대로 Skip Framework의 서드파티 라이브러리는 아직 없다고 봐야하고, 사용한다면 Swift, Kotlin각각 추가해서 코드를 따로 써야하는데 이 부분은 본인도 아직 잘 모르기 때문이다.

 

때문에 나중에 정말 서드파티 라이브러리가 간절하고 각각 코드를 쓰더라도 라이브러리를 가져와야한다면 그 때 다시 작성해보도록 하겠다.

마지막

이렇게 Skip에 대한 소개 및 기본적인 사용방법에 대해서 3개의 포스팅에 나눠 작성해봤다.

앞으로는 코드와 관련된 부분들, Skip을 사용하면서 발생하는 에러 및 문제점들을 해결하는 것들을 작성하도록 하겠다.

 

스킵 관심 많이 가져주세요~~~

728x90
반응형