Skip to content

4.0.0

Choose a tag to compare

@github-actions github-actions released this 18 Aug 00:09
· 19 commits to main since this release
a32282d

Added

  • idnaEncodedURL / idnaDecodedURL on String and Substring: URL-aware variants that transform only the host of a URL-shaped string ([scheme://][userinfo@]host[:port][/path?query#fragment]), leaving every other component unchanged. Use these instead of applying idnaEncoded to a full URL.
  • Linux support, verified by CI (swift build / swift test on the official Swift container).
  • GitHub Releases are now created automatically when a version tag is pushed.
  • CI Success aggregate check for branch protection.
  • Community files: CHANGELOG.md, CONTRIBUTING.md, SECURITY.md, issue and PR templates.

Changed

  • Breaking: Package.swift requires swift-tools 5.9 (Xcode 15 or later for SPM consumers) and declares explicit platforms: macOS 10.13, iOS 12, tvOS 12, watchOS 4, visionOS 1.
  • Product bundle identifiers renamed from com.gumob.* to dev.futamura.*, completing the account rename.
  • CI runs on pushes and pull requests to main and develop, on current macOS runner images, resolving simulator destinations at runtime.
  • API documentation migrated from jazzy to DocC, built and deployed to GitHub Pages by CI; the generated site is no longer tracked in the repository. New URL: https://futamura.github.io/PunycodeSwift/documentation/punycode/.
  • Releasing is now a separate tag-triggered workflow that verifies the tag against the project version before publishing. Version tags are immutable.
  • Development tooling: Ruby 3.4 / Bundler 2.7, gems updated to clear all outstanding Dependabot alerts.

Fixed

  • punycodeDecoded returned garbage characters for malformed input instead of nil: inputs ending mid-digit-sequence (e.g. "y-z") and inputs decoding to C1 control characters (e.g. "abcd") now return nil (#78).
  • punycodeDecoded / punycodeEncoded could crash on adversarial input due to unchecked integer overflow; the RFC 3492 overflow checks are now implemented and such inputs return nil (#78).
  • idnaDecoded now accepts an uppercase XN-- ACE prefix (RFC 5890 defines it as case-insensitive).

Changed

  • Breaking: idnaEncoded now maps the hostname before encoding — NFKC compatibility folding (full-width forms, alternate dots), lowercasing, and NFC — so inputs like "GOO.GL" encode to "goo.gl" (#4). The full UTS #46 mapping table is intentionally not implemented. punycodeEncoded remains the raw RFC 3492 single-label transformation, now documented as such.

Deprecated

  • CocoaPods distribution ends when the trunk becomes read-only on 2026-12-02. Migrate to Swift Package Manager.
  • Carthage support is best-effort and no longer CI-verified.