ns embed ios: finish the host metadata setup (duplicate -sectcreate flags, missing metadata file, hardcoded arch)
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 初心者へのやさしさ
- 50/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- typescript
- 領域
- mobile-dev
調査の方向性
The work centers on lib/services/ios-project-service.ts lines 738-829. Make the -sectcreate flag addition idempotent, implement the missing metadata file delivery (uncomment or replace the build phase), replace the hardcoded metadata-arm64.bin with architecture/SDK-aware naming, and surface errors from the silent try/catch. Review prepare-native-platform-service.ts for the embed flow.
索引モデルが issue の本文から書いたものです。
説明
Is your feature request related to a problem? Please describe.
ns embed ios (added in #5803) leaves the host project's metadata setup half-finished. This issue tracks the follow-ups.
Context: NativeScript/ios#488 changes the runtime so that, when Config.MetadataPtr is nil, it reads the __DATA,__TNSMetadata section of the host executable. Until that lands, the section ns embed ios links into the host is never read (embedded apps run on the default metadata baked into NativeScript.framework), which is why these problems have gone unnoticed. Once it lands, the section becomes the metadata the embedded app actually runs on.
The relevant block is in lib/services/ios-project-service.ts.
1. The linker flag is appended on every run (bug)
project.addToOtherLinkerFlags('-sectcreate __DATA __TNSMetadata "<project>/metadata-arm64.bin"') runs on every ns embed ios: embed forces prepareProject each time (prepare-native-platform-service.ts), and addToOtherLinkerFlags in nativescript-dev-xcode pushes without checking for an existing entry. The host's OTHER_LDFLAGS gains one more copy per run.
ld accepts a repeated -sectcreate for the same segment/section and concatenates the files (checked with a two-flag test link: a 17-byte file produced a 34-byte section). So every re-run adds another full copy of the metadata (roughly 9–12 MB each) to the host executable. The app still works, because the runtime reads from the start of the section.
2. Nothing delivers the metadata file
The flag points at <hostProject>/<projectName>/metadata-arm64.bin, but nothing creates that file. The "Copy Metadata (DEBUG)" build phase is commented out and step 2 ("Ensure metadata is copied as a file") is a // TODO. ns embed is a prepare, so the metadata generator never runs. Users have to build the NativeScript project separately and copy the file by hand (as the ns-embed-example README describes), and the host fails to link if it is missing.
3. The architecture and SDK are hardcoded
The flag always names metadata-arm64.bin, and the documented manual step copies the simulator build's file, so device builds link metadata generated against the simulator SDK. The app template uses metadata-$(CURRENT_ARCH).bin from the configuration build dir.
4. Failures in this block are silent
The whole host-project setup is wrapped in a try/catch that only logs at trace level ("Error adding NativeScript group to host project"), so a failure leaves the host partially configured with no visible error.
Describe the solution you'd like
- Make adding the
-sectcreateflag idempotent (skip or replace an existing entry), and clean up duplicates left by earlier runs. - Have
ns embed iosput the metadata in place, e.g. a build phase in the host that copies it from the NativeScript project's build output (what the commented-out phase sketched). - Reference the metadata per architecture and SDK instead of a fixed
metadata-arm64.bin. - Surface errors from the host-project setup instead of logging them at trace level.
Describe alternatives you've considered
For the metadata file: instead of copying the NativeScript project's metadata, run the metadata generator against the host project's own build settings (the nsld.sh mechanism the app template uses). That would also cover native classes that exist only in the host, which the copied metadata does not describe, but it is a larger change. Copying is a reasonable first step.
Having the host pass Config.MetadataPtr explicitly is no longer needed once NativeScript/ios#488 is in: the runtime finds the host executable's section itself, so Swift hosts need no C shim.
Anything else?
- Runtime side: NativeScript/ios#488. After it, the
NativeScriptSDKSwiftPM product additionally embeds a default-metadata framework for zero-config hosts, while theNativeScriptproduct stays lean. - Related docs change outside this repo:
NativeScript/ns-embed-exampletells hosts to addNativeScriptSDK. Hosts set up withns embedlink their own metadata and should add theNativeScriptproduct instead, otherwise they also carry the unused 8.8 MB default-metadata framework.
Please accept these terms
- I have searched the existing issues as well as StackOverflow and this has not been posted before
- I agree to follow this project's Code of Conduct
- 主要言語
- JavaScript
- スター
- 1.1k
- フォーク
- 203
- 平均マージ
- 3日 4時間
- マージ済み PR(30日)
- 8
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
NativeScript/nativescript-cli のほかの issue
-
bug-pending-triage
難易度 4/5 3〜5日 初心者へのやさしさ 18/100
NativeScript/nativescript-cli#6172 · コメント 3 件 ·
メンテナーはふだん 1 日以内に返信
-
Fix cleanup request removal presence check logging再び着手できるかも @edusperoni が 101 日前に担当しましたが、オープン中のプルリクエストはありません。 オープン
NativeScript/nativescript-cli#6090 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
ns 9 running test after running the app starts the app not the test runner.再び着手できるかも @NathanWalker が 186 日前に担当しましたが、オープン中のプルリクエストはありません。 オープンin progress
NativeScript/nativescript-cli#6015 · リアクション 1 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
question
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
NativeScript/nativescript-cli#5992 · コメント 5 件 ·
メンテナーはふだん 1 日以内に返信
-
feature-pending-triage
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
NativeScript/nativescript-cli#5975 ·
メンテナーはふだん 1 日以内に返信
NativeScript/nativescript-cli の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
riverqueue/river#1576 ·
メンテナーはふだん 1 日以内に返信
-
documentation good first issue
難易度 1/5 1時間未満 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
good first issue help wanted
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
modrollstudio/Modroll-Studio-Website#80 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
good first issue help wanted
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
mafzalkalwardev/mailforge#21 ·
-
good first issue help wanted
難易度 1/5 1時間未満 初心者へのやさしさ 82/100