1. 소개
Rapido Cloud (www.rapido.cloud)에서 Salesforce 고객을 위한 모바일 애플리케이션을 개발하고 있습니다. 이 애플리케이션은 Salesforce 고객이 Salesforce Mobile SDK 또는 Salesforce Mobile Publisher를 사용하지 않고도 자신의 브랜드를 가진 모바일 애플리케이션을 쉽게 배포할 수 있도록 도와줍니다.
이 모바일 애플리케이션은 Ionic 8, Angular 18, TypeScript, Capacitor 및 Capgo CapacitorUpdater와 같은 현대적인 '표준' 플랫폼과 널리 사용되는 컴포넌트 및 도구로 개발되었습니다. 이들은 Salesforce 플랫폼의 Lightning Web Components와 같은 특정 사항을 관리하지 않아야 하는 고객에게 더 쉽게 관리되며, 저에게 Ionic + Angular 모바일 애플리케이션의 개발자 및 유지관리자 모집과 유지보수가 더 쉽고 저렴해집니다.
이 기사에서는 Capgo와 __CAPGO_KEEP_1__ CapacitorUpdater를 사용하여 Capgo를 구현하는 디자인, 선택 및 구현에 대해 설명합니다. semantic-release 자동화된 모든 배포를 관리하기 위한 매우 성공적인 무리 없는 방법입니다. 모든 것이 Github 액션을 통해 자동화되었습니다. 모든 것이 Capgo CapacitorUpdater의 14일 무료试用 기간 동안 설계, 테스트 및 문서화되었습니다.
2. Capgo을 사용하는 이유는 무엇입니까? semantic-release를 사용하는 이유는 무엇입니까?
Capgo CapacitorUpdater는 애플리케이션 배포를 더 간단하고 빠르게flexible하게하는 promise로 나를 끌어들였습니다. 앱스토어/구글 플레이 스토어 배포 프로세스를 통과하는 것보다.
I was rather afraid of the learning curve to make this successful but I got my app onto Apple TestFlight quite easily. I was then in position to use Capgo CapacitorUpdater to deploy my updates much faster.
My first requirement and test case was to deploy for myself to test my app as a real mobile app on my own phone, instead of testing in a mobile emulator or in a simulator via the Nexus mobile browser suggested by IIonic. That’s because my app uses native features such as Geolocation or accessing the Photo Gallery and Camera. Not having the past experience of testing a Capacitor mobile app, I wasn’t sure if everything was going to work properly : nothing better than to test the real app, in real conditions !
So Capgo CapacitorUpdater helped me update my application on my mobile, live, 1 minute after saving a new feature or fix in my source code : so relieving, and so flexible, and easy to set up !
3. 내 분기 및 릴리스 모델, 그리고 semantic-release가 어디에 들어가는지
이제 Capgo 서버로의 배포가 정상 작동하고 있으므로, CI/CD pipeline에 자동화하고 통합해야합니다.
모바일, 웹 또는 Salesforce를 위한 모든 애플리케이션에 대해:
개발은
- 에서 수행되며 branch가
feature/..., 그리고main에서 병합됩니다.main개발 branch의 대부분은 유지보수 및 사용자 지정 배포를 위한 특정 기능 외에 - 릴리스 branch에서 배포가 트리거됩니다. which may be :
production, prerelease branch (alpha,beta,nightly, etc.) 및 고객 또는 상황에 맞는 branch를 사용하여 사용자 지정 배포를 위한 branch - 배포는 pull request가 deployment branch에 merge될 때 트리거됩니다. 태그 트리거 배포를 사용하지 않습니다. semantic release는 태그와 나머지 모든 것을 관리하기 때문입니다. 기본적으로 이것은 Gitlab Flow :
Gitlab Flow

https://faun.dev/c/stories/manuelherrera/git-branching-strategies-in-2022 semantic-release에 대한 한 가지 주의사항 :
배포 branch에서 semantic-release가 트리거될 때, 이전 태그의 버전 번호와 제공된 수정 사항 또는 기능에 따라 자동으로 새로운 버전 번호를 계산합니다. 수정 사항은 패치 버전을 생성하고, 기능은 마이너 버전을 생성합니다. 또한 prerelease
, etc.를 버전 번호에 자동으로 포함합니다. alpha, beta__CAPGO_KEEP_0__
Semantic release는 커밋에서 변경 로그를 생성하고, conventional 커밋 (https://www.conventionalcommits.org/en/about 에서 참조)과 semantic release에서 정의된 그룹으로.fixes 및 features를 그룹화합니다. https://www.conventionalcommits.org/en/about또한 semantic release는 git (__CAPGO_KEEP_0__, 나의 경우) 병합된 pull 요청과 관련된 이슈에 태그 및 릴리즈에 대한 링크를 포함하는 댓글을 업데이트합니다. 마지막으로, 이 __CAPGO_KEEP_1__ 릴리즈에서, 소스 __CAPGO_KEEP_2__, 바이너리(필요한 경우), etc.와 같은 자산을 첨부합니다.
It will also update all your git (Github, in my case) merged pull requests and related issues with comments linking them to the tag and release. Finally, in this Github release, it will attach assets such as source code, binaries if necessary, CHANGELOG.mdCapgo가 __CAPGO_KEEP_0__ 배포에 대해 semantic release를 수행하고 싶은 것은 다음과 같습니다.
4. Branches, releases/prereleases, channels in semantic release and in Capgo
So what I want semantic release to do for Capgo deployments is the following.
Capgo는 fork된 repo (https://__CAPGO_KEEP_0__.com/Cap-go/standard-version)에서 tool을 개발했습니다.
https://Capgo.com/Cap-go/standard-version standard-version __CAPGO_KEEP_0__ standard-version (https://github.com/Cap-go/standard-version__CAPGO_KEEP_2__ capacitor-standard-version (https://github.com/Cap-go/capacitor-standard-version) 및 capacitor-plugin-standard-version (https://github.com/Cap-go/capacitor-plugin-standard-version) 저장소들이다. 그들은 블로그에 Capgo의 배포에서 사용하는 버전 체계에 대해 문서화했다 (https://capgo.app/blog/how-version-work-in-capgo/). 자바스크립트 번들을 위한 'standard' semver 'Semantic Versioning' (https://semver.org)을 따르며, semantic-release 그것도 당연히
So 그것은 좋고, 나에게는 큰 편안함이다. 왜냐하면 나는 semantic-release 그것을 광범위하게 사용하기 때문이다.
또한, semantic release는 다양한 채널에서 앱 배포를 생성하도록 설정하고 싶다.
As mentioned above, I need to deploy prerelease version from branches such as alpha, beta, nightly 등의 branch에서 prerelease 버전을 배포해야 하는데, 고객 전용 버전도 branch 등에 배포해야 하는데 production-customer-jones, production-customer-doe등의 branch에서 배포해야 하는데
Capgo은 '채널' 기능을 제공하는데, 이 기능은 semantic release도 지원하는 기능이기 때문에 두 기능을 함께 사용할 수 있어 매우 기대됩니다. 이 기능은 XCode Cloud가 관리하는 다양한 branch 빌드와도 잘 맞습니다.
semantic release가 prerelease에서 생성하는 semver 버전 번호는 다음과 같은 형식입니다. 1.0.0-alpha.1이 branch에서 빌드가 진행되면 빌드 번호가 1.0.0-alpha.2, etc. Although not documented explicitly, these version numbers are supported by Capgo, which is great news for me : I will use semantic release channels and prerelease to generate versions of my app with Capgo channels.
이 버전 번호는 Capgo에서 지원하고 있으므로, 나는 semantic release의 채널과 prerelease를 사용하여 __CAPGO_KEEP_1__ 채널을 사용하여 앱의 버전을 Capgo에서 생성할 수 있습니다.
To automate deployment of your app bundles to Capgo, you need to use the Capgo CLI command bundle upload앱 배포를 자동화하기 위해서는 __CAPGO_KEEP_1__ __CAPGO_KEEP_2__ 명령어를 사용해야 합니다. npx @capgo/cli@latest bundle upload --help Type
npx @capgo/cli bundle upload --channel $CHANNEL --apikey $CAPGO_APIKEY --bundle $VERSION --bundle-url $CAPGO_APPID
- CHANNEL is the Capgo channel to which we want to deploy (eg
alpha) - 버전은 semantic release (예를 들어
1.0.0-alpha.1) - CAPGO_APIKEY는 Capgo에서 CI/CD pipeline 로그인에 고유한 식별자를 제공하는 것입니다.
- CAPGO_APPID는 Capgo에서 애플리케이션에 고유한 식별자를 제공하는 것입니다 (예를 들어
com.mystartup.mysuperapp)
6. semantic release + Capgo CapacitorUpdate 설정
마지막으로, 이것은 어떻게 모두가 맞물어지는 것일까요?

semantic release와 Github Actions으로 빌드된 앱 버전
Github Actions을 사용한 semantic release 자동화
semantic release의 아름다움은 CI/CD 플랫폼의 형태로 배포 자동화, 즉 Github Action 워크플로우가 매우 간단합니다. 다른 CI/CD 플랫폼에서 매우 유사하게 보일 것입니다.
# ./github/workflows/release.yml
name: Release
on:
workflow_dispatch:
push:
branches: [alpha, alpha-nocapgo, dev-rupert] # <--- adapt this
env:
CAPGO_APPID: com.mystartup.mysuperapp # <--- adapt this
CAPGO_APIKEY: ${{ secrets.CAPGO_APIKEY }}
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: 24
cache: "npm"
- run: npm install
- run: npx semantic-release
env:
DEBUG: true
GITHUB_TOKEN: ${{ github.token }}
이것은 단지 NodeJS 환경을 설치하고 semantic release를 호출하는 것입니다.
branch에 나열된 모든 머지에 대해, semantic release는 배포를 트리거합니다.
설정 branches, semantic release will trigger a deployment.
Set CAPGO_APIKEY repository의 비밀을 업데이트하세요.
CAPGO_APPID 여기.
semantic release의 동작은 __CAPGO_KEEP_0__에 설정됩니다. .releaserc.json configuration file에서 설정합니다.
// .releaserc.json
{
"branches": [
{
"name": "release",
"channel": "production"
},
{
"name": "alpha",
"channel": "alpha",
"prerelease": "alpha"
},
{
"name": "alpha-nocapgo",
"channel": "alpha",
"prerelease": "alpha-nocapgo"
},
{
"name": "dev-rupert",
"channel": "development",
"prerelease": "development"
},
{
"name": "dev-paul",
"channel": "development",
"prerelease": "development"
}
],
"ci": true,
"debug": true,
"dryRun": false,
"repositoryUrl": "https://github.com/RupertBarrow/mysuperapp",
"verifyConditions": ["@semantic-release/github"],
"plugins": [
[
"@semantic-release/commit-analyzer",
{
"preset": "angular",
"releaseRules": [
{ "type": "breaking", "release": "major" },
{ "type": "feat", "release": "minor" },
{ "type": "fix", "release": "patch" },
{ "type": "ci", "release": "patch" },
{ "type": "doc", "release": "patch" },
{ "type": "docs", "release": "patch" },
{ "type": "refactor", "scope": "core-*", "release": "minor" },
{ "type": "refactor", "release": "patch" },
{ "scope": "no-release", "release": false }
]
}
],
"@semantic-release/release-notes-generator",
["@semantic-release/changelog", { "changelogFile": "CHANGELOG.md" }],
[
"@semantic-release/git",
{
"assets": ["package.json", "CHANGELOG.md", "ios/App/App.xcodeproj/project.pbxproj"],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}
],
["@semantic-release/github", { "assets": ["CHANGELOG.md"] }],
[
"@semantic-release/exec",
{
"prepareCmd": "npm run build",
"publishCmd": "npm add -D @capgo/cli && npx @capgo/cli bundle upload --channel ${branch.channel} --apikey $CAPGO_APIKEY --bundle ${nextRelease.version} --bundle-url $CAPGO_APPID"
}
]
]
}
branches:branchesbranch의 설정 (name)을 Capgo 채널 (channel)에 매핑하고 prerelease 버전 번호를 어떻게 불러올 것인지 설정합니다. 예를 들어,prerelease)이면 semantic release가 생성하는 버전 번호는branch.prerelease = "development"입니다.x.y.z-development.n- Cloudflare로
alphaCapacitor로alpha-nocapgoGitHub로alpha채널, 버전 번호에 다른 prerelease 이름을 가지는 - 개발자 branch에 배포
dev-rupert또는dev-paul모두 __CAPGO_KEEP_0__ 채널에 배포할 것입니다.developmentchannel on Capgo, all with the samedevelopment: semantic release의 첫 번째 단계에서, __CAPGO_KEEP_0__에 대한 올바른 접근 권한이 있는지 확인합니다. __CAPGO_KEEP_1__ __CAPGO_KEEP_2__에 대한 인증 확인을 추가할 예정입니다.
verifyConditions: in the first stage of semantic release, it checks that it has the correct access to Github. I hope to add an authentication check for the Capgo CLI here later@semantic-release/commit-analyzerhttps://__CAPGO_KEEP_0__.com/semantic-release/semantic-release?tab=readme-ov-file#commit-message-formathttps://github.com/semantic-release/semantic-release?tab=readme-ov-file#commit-message-format)@semantic-release/release-notes-generator: Ionic 빌드와 semantic release 작업에 의해 업데이트된 파일을 커밋합니다.CHANGELOG.md@semantic-release/git그리고package.json,CHANGELOG.mdandios/App/App.xcodeproj/project.pbxproj- 안드로이드를 위한 빌드를 하지 않습니다.@semantic-release/github: __CAPGO_KEEP_0__ 릴리즈에 포함된 자산으로 __CAPGO_KEEP_0__ 파일을 첨부합니다.CHANGELOG.mdfile to the Github release as an asset@semantic-release/exec) 그리고 앱 번들을 __CAPGO_KEEP_0__ 서버로 효과적으로 빌드 및 배포합니다. (prepareCmd) and then to effectively build deploy the app bundle to the Capgo servers (publishCmd)
You는 버전 번호를 계산하고 증가시키는 방법에 대한 설명, 변경 로그를 생성하는 방법, Github 태그 또는 릴리즈를 생성하는 방법에 대한 설명을 하지 않아도 됩니다. : semantic release가 기본적으로 버전 번호를 계산하고 증가시키며, 변경 로그를 생성하고 Github 태그 또는 릴리즈를 생성하는 등의 모든 작업을 자동으로 처리합니다.
XCode Cloud를 사용하여 새로운 바이너리를 빌드합니다.
XCode Cloud와 통합하여 새로운 버전의 애플리케이션 바이너리를 빌드하는 것은 간단합니다. (Google Play에 배포하지 않지만, 이 빌드는 유사한 빌드일 것입니다.) :
- XCode Cloud 프로세스를 설정하여 특정 branch에서 변경이 발생할 때 빌드를 자동으로 수행하도록 설정했습니다. (예를 들어, 이 branch에서 XCode Cloud를 빌드할 때만 __CAPGO_KEEP_0__ 파일이 업데이트되면 빌드를 자동으로 수행합니다. 이 파일은 semantic release가 생성한 각 버전마다 업데이트됩니다.
production) - 다른 branch에서 빌드를 트리거하여 채널별로 배포를 시뮬레이션할 수 있습니다. 각 XCode Cloud 빌드 구성에서 다른 branch에서 빌드를 트리거할 때마다 환경 변수를 수동으로 설정하여 __CAPGO_KEEP_0__ 값으로 설정합니다.
CHANGELOG.md__CAPGO_KEEP_0__ - __CAPGO_KEEP_0__
branch.channel__CAPGO_KEEP_0__releaserc.json(yes, 이는 수동 복제입니다) 그리고 만약에, 나는 다른 AppStore 애플리케이션을 각 사용자 지정 고객 애플리케이션에 대해 사용자 지정 릴리스 branch에서 배포할 수 있었습니다. 앞서 언급한 것과 같이.

XCode Cloud에서 Capgo 채널을 사용하여 앱 바이너리를 빌드하는 중입니다.
7. 결론
결론을 내리자면, 나는 Capgo CapacitorUpdater를 내 표준 의미론적 릴리스 pipeline에 통합할 수 있었고, 14일 무료 시험 기간 내에 빠르게 통합할 수 있었으며, 결과는 다음과 같습니다.
- bundle 버전 번호는 의미론적 릴리스에 의해 자동으로 생성되고 Capgo 서버와 호환됩니다.
- semantic release는 Capgo 애플리케이션 번들을 자동으로 배포하며, Capgo 채널도 사용합니다.
- 이것은 애플리케이션 바이너리 XCode Cloud 빌드와 잘 맞습니다.
다음 단계
이 앱의 개발 단계에 있습니다. 테스트를 위해 iOS에서 TestFlight을 통해 빠르게 앱을 제공할 것입니다. Capgo의 힘을 고려할 때, 나는 무료 버전의 앱을 AppStore에 배포할 것입니다. 테스트를 위해 Capgo로 정기적으로 업데이트할 것입니다. 그리고 나서, 또 다른 (유료) 버전의 앱을 AppStore에 배포할 것입니다. 다른 레코드 아래에 배포하고, Capgo로 정기적으로 업데이트할 것입니다.
Capgo에 대한 더 나은 빌드 전 검증을 추가하길 바랍니다. bundle upload 기본 요구 사항을 내 semantic release 구성으로 넣었습니다.
Ionic + Angular + Capacitor로 개발된 미래의 모바일 앱을위한 간단하고 reproducible한 semantic release pipeline이 있습니다.
저자 - Rupert Barrow
22년 이상의 Salesforce 경험을 보유하고 있습니다. Salesforce의 고객 및 사용자, 파트너 및 통합자, 설계자, 개발자, 비즈니스 분석가 및 컨설턴트로 다양한 역할을 수행했습니다. 저는 프랑스에서 성공적인 Salesforce SI 파트너인 Altius Services의 COO 및 CTO로 13년 동안 공동 설립 및 공동 관리했습니다. 새로운 모험을 시작하기 위해 Salesforce 솔로 프레너로서 저의 Rapido Cloud 제품 제공을 시작했습니다.
링크드인에서 저를 찾으십시오. https://linkedin.com/in/rbarrow.
저희의 Salesforce 제공을 확인하십시오. https://www.rapido-companion.app 또한 https://www.rapido.cloud (개발 중입니다).
Rapido Cloud에서 Capgo CapacitorUpdater를 사용하여 Capgo CapacitorUpdater를 계속 진행하세요.
라이브 업데이트 전송 계획을 위해 __CAPGO_KEEP_0__ Live Updates와 연결하세요. 라이브 업데이트 Capgo Live Updates의 제품 워크플로우에서 Capgo Live Updates를 사용하세요. 라이브 업데이트 __CAPGO_KEEP_0__ Live Updates의 구현 세부 정보를 __CAPGO_KEEP_0__ Live Updates에서 확인하세요. 라이브 업데이트 Capgo Live Updates의 기능 세부 정보를 Capgo Live Updates에서 확인하세요. 라이브 업데이트 Capgo Live Updates의 업데이트 동작을 Capgo Live Updates에서 확인하세요. 라이브 업데이트 __CAPGO_KEEP_0__ Live Updates의 구현 세부 정보를 __CAPGO_KEEP_0__ Live Updates에서 확인하세요. 라이브 업데이트 __CAPGO_KEEP_0__ Live Updates의 기능 세부 정보를 __CAPGO_KEEP_0__ Live Updates에서 확인하세요. 라이브 업데이트 __CAPGO_KEEP_0__ Live Updates의 업데이트 동작을 __CAPGO_KEEP_0__ Live Updates에서 확인하세요. 라이브 업데이트 __CAPGO_KEEP_0__ Live Updates의 구현 세부 정보를 __CAPGO_KEEP_0__ Live Updates에서 확인하세요. 라이브 업데이트 __CAPGO_KEEP_0__ Live Updates의 기능 세부 정보를 __CAPGO_KEEP_0__ Live Updates에서 확인하세요. 업데이트 동작의 구현 세부 사항에 대해, 업데이트 유형 업데이트 유형의 구현 세부 사항에 대해.