0.35.17
(fix): Fix generated code for set-typed request bodies and response values. The
Swift SDK represents set as JSONValue, so set example values now render
as JSONValue literals (e.g. JSONValue.array([...])) in snippets and wire
tests instead of being dropped or emitted as untyped Swift array literals.
(fix): Fix wire tests for endpoints that return an enum. The expected-response value
is now referenced through its enum type (e.g. WeatherReport.sunny) rather
than via shorthand (.sunny), which has no contextual type to resolve
against when the response itself is an enum.
0.35.16
(fix): Fix generated snippets and wire tests omitting path parameters bound to
API-level variables. Path parameters are always required arguments on the
generated endpoint method, so a placeholder value (e.g. <endpointParam>) is
now emitted for any path parameter whose value is absent from the example,
keeping the generated SDK, snippets, and wire tests compiling.
0.35.15
(fix): Fix endpoints with a stream-parameter response generating a JSONValue return
type, which broke generated wire tests that compared the result against the
concrete response model. The Swift SDK does not yet implement response
streaming, so these endpoints are now generated against their non-streaming
response shape (e.g. the declared JSON response model).
0.35.14
(fix): Fully qualify Foundation.Data in the generated HTTP client and test
templates. When an API defined a type named Data, the generated
top-level Data type shadowed Foundation.Data in those templates, so the
request-body builder and stub helpers resolved to the wrong type and failed
to compile. The remaining bare Data references now use Foundation.Data,
matching the convention already used elsewhere in the runtime.
0.35.13
(fix): Fixed argument ordering in generated wire tests and snippets so they match
the order in which the corresponding Swift types declare their memberwise
initializer parameters. Example object properties were previously emitted in
the example’s authoring order, and file-upload fields were grouped by kind
(files before body properties), both of which could produce arguments in the
wrong positional order and fail to compile. Wire-test response objects are
now reordered to match the generated struct’s declaration order, and
file-upload request snippets preserve the original schema declaration order.
0.35.12
(fix): Fixed wire-test stub response bodies so they are valid JSON for every
response type. The generated SDK reads String-typed response bodies as raw
UTF-8 but decodes every other type via JSONDecoder. Wire tests now mirror
that: String-decoded responses (string/bigInteger/base64 primitives) emit
the raw payload, while all other types (objects, enums, dates, UUIDs, numbers,
unions, etc.) are JSON-encoded. Previously bare scalars such as a UUID or enum
value were emitted unquoted, producing invalid JSON that failed to decode.
0.35.11
(fix): Fixed several Swift code generation bugs around identifier and string escaping:
- Enum raw values are now escaped as raw Swift string content rather than being JSON-encoded, fixing invalid literals (e.g. unterminated strings and bogus escapes).
- Reserved keywords used as type names, enum/case names, property names, and type
references are now backtick-escaped (e.g.
Type), and identifiers that start with a digit are sanitized (e.g.3D->_3D). - String-typed literals that are not registered as nested literal enums (such as
endpoint header/query literals) now fall back to
JSONValueinstead of crashing generation.
0.35.10
(fix): Fix enum query parameters wrapped in Nullable<> to emit .rawValue for proper
Swift compilation. Previously, nullable enum query params generated .string(0.rawValue), causing type errors.
0.35.9
(chore): Bump Node.js base image from 24.15 to 24.16.
0.35.8
(fix): Dynamic snippets now render path-parameter arguments in IR (URL / SDK signature) order
rather than in the order they happen to appear in the input request, so generated
examples line up with the actual SDK method signature even when the spec lists path
parameters in a different order.
0.35.7
(chore): Patch the bundled ip-address to v10.2.0 in the swift-sdk container to
address CVE-2026-42338 / GHSA-v2v4-37r5-5v8g (XSS in Address6 HTML-
emitting methods). npm 11.12.1 (shipped with node:24.15) bundles
ip-address@10.1.0 via socks; this overlays the published 10.2.0
tarball in place at image build time.
0.35.6
(chore): Patch Swift SDK + Swift model generator container CVEs flagged in the AWS
ECR / grype scan. Patch npm’s bundled picomatch@4.0.3 -> 4.0.4 and
brace-expansion@5.0.4 -> 5.0.5 via tarball replacement so the published
image no longer ships the vulnerable bundled JS dependencies that grype
flags.
0.35.5
(chore): Bump the Swift SDK and Swift model generator containers’ Node base image
from node:22.22-alpine3.23 to node:24.15-alpine3.23. Aligns the
generators with the rest of the Fern generator containers on a single Node
major version (Node 24) and picks up Node 24’s CVE patches.
0.35.4
(chore): Bump generator container Node.js base image to node:22.22-alpine3.23 and
apply latest Alpine package security updates at build time.
0.35.3
(fix): Fix Swift wire-test runtime equality failures when a response body contains
a map (Dictionary<String, T>) whose value is an explicit-null nullable, or
an Optional<Nullable<T>> field whose example is explicit-null. Previously
the generator embedded the IR’s jsonExample for the response body, which
silently dropped keys whose value resolved to JS undefined (e.g. an
unresolved nullable<T>), and the expected-struct generator filtered
optional properties using the same jsonExample === undefined check, which
matched both “truly absent” and “explicit-null nullable” examples. The wire-
test JSON body is now built by walking the typed example shape directly,
and the expected-struct generator skips a property only when the typed
optional container is genuinely empty — so an explicit-null nullable
inside an optional now renders as Optional(.null) in both the embedded
JSON body and the expected struct.
0.35.2
(chore): Update the Swift SDK generator container base image from
node:22.12-alpine3.20 to node:22.22-alpine3.22 to address 92
container vulnerabilities (3 Critical, 48 High, 30 Medium, 11 Low)
reported by Grype. The bump pulls in newer Alpine packages
(libcrypto3/libssl3, musl, busybox, zlib), Node.js 22.22.x, and the
bundled npm transitive dependencies (cross-spawn, minimatch, glob,
tar, brace-expansion, ip-address, diff).
0.35.1
(fix): Apply canonical “all user-specified examples, else first autogenerated” selection
in the Swift SDK snippet output path. README examples now use the user-specified
example value (when one exists) instead of the autogenerated placeholder, matching
TS-v1 / Python-v1 behavior.
0.35.0
(feat): Generate CONTRIBUTING.md for Swift SDKs.
0.34.2
(fix): Emit wire-test response bodies as Swift raw multi-line string literals
(#"""..."""#) so that JSON escape sequences such as \n survive
verbatim into the runtime String and reach JSONDecoder as valid
JSON. The previous regular triple-quoted literal caused Swift to
unescape \n into real newline characters at runtime, which
produced invalid JSON (RFC 8259 disallows raw control characters
inside JSON string values) and made JSONDecoder reject the body
with dataCorrupted("The given data was not valid JSON.").
0.34.1
(fix): 在发出包装原始用户数据(示例值、动态代码片段输入、JSON 线路测试 fixture)的 Swift 字符串字面量时,正确转义控制字符、真实换行、真实反斜杠和真实双引号。此前,包含真实换行的示例值(例如多行 iCalendar 字符串)会导致生成的 SDK Swift 编译失败,并报错 error: unterminated string literal。