The markdown parsing is broken/disabled for release notes. Sorry about that, I'm chasing the source of a crash that's been bringing this website down for the last couple of days.
### Added
- Updated protobufs. Notably many new status codes are available.
- Add `FeeComponents`, `FeeData`, `FeeDataType`, `FeeSchedules`, `FeeSchedule`, and `TransactionFeeSchedule` in order to parse the fee schedule from the network.
- Add `ExchangeRates` and a way to get them through the network.
### Changed
- Mark many classes and members as `final`.
- Renamed `Error.CannotToStringWithChecksum` to `CannotCreateChecksum`
- Rename `PrivateKey.getPublicKey()` to `var publicKey`
- Remove `Error.Signature` (unused)
- Remove `Error.NoEvmAddressPresent` (unused)
- Remove `Error.WrongKeyType` (in favor of returning Option in the one function)
- Return `EvmAddress` from `PublicKey.toEvmAddress`
- `toStringWithChecksum` can now throw
### Internal
<sub>Current internal direction is moving Swift away from the Rust implementation.</sub>
- Replaced the `Mnemonic` with a Swift-native implementation.
- Replaced `Semver` parsing with a Swift-native implementation.
- Replaced `TransactionId` parsing with a Swift-native implementation.
- Replaced `NftId` parsing with a Swift-native implementation.
- Replaced `PublicKey` and `PrivateKey` parsing with a Swift-native implementation.
- Use protobuf (de)serialization instead of JSON (for most types) to prepare for moving execution to Swift-native.
### Added
- Document behavior with 4 more examples
- [Transfer tokens from one account to another](Examples/TransferTokens/main.swift)
- [Delete a file](Examples/DeleteFile/main.swift)
- [Create a topic with an admin key](Examples/CreateTopic/main.swift)
- [Validate Account ID checkums](Examples/ValidateChecksum/main.swift)
### Internal
- Refactored transaction and query execution to react better to more esoteric failures at the node or mirror node level.
- Cleared a large number of lint warnings from the pedantic lint level.
### Added
- Support string in `FileAppendTransaction.contents`
- Add `signTransaction` to `PrivateKey`
- Add `verifyTransaction` to `PublicKey`
- Add `getScheduledTransaction` to `ScheduleInfo`
- Add support for chunked transactions to `FileAppendTransaction` and `TopicMessageSubmitTransaction`
### Fixed
- Fix mainnet transaction preparation
### Added
- Add `Client.forName` to create a client from the name of a network
- Add `toBytes` to all `Transaction` types
- Add `fromBytes` to `Transaction`
- Add `freeze` and `freezeWith` to `Transaction`
- Add `ContractFunctionParameters` and `ContractFunctionSelector` and its usage across the various contract transactions and queries
- Add `ContractFunctionResult`
- Add `tokenBalances` and `tokenDecimals` to `AccountBalance`
### Fixed
- Set defaults for various transaction fields (auto renew period, etc.)
### Added
- Add `EvmAddress`
- Add `toSolidityAddress` and `fromSolidityAddress` to all entity ID types
- Add `evmAddress` and `fromEvmAddress` to `AccountId`
- Add `autoRenewAccountId`, `alias`, and `evmAddress` to `AccountCreateTransaction`
- Add `autoRenewAccountId` to `AccountUpdateTransaction`
- Add `autoRenewPeriod` and `autoRenewAccountId` to `FileCreateTransaction`
- Add `autoRenewPeriod` and `autoRenewAccountId` to `FileUpdateTransaction`
- Add `autoRenewPeriod` and `autoRenewAccountId` to `FileInfo`
- Add `checksum` and (automatic) checksum validation to all entityID types
- Add `KeyList`
- Add `keys` to `FileInfo`
- Add `toBytes` and `fromBytes` to `AssessedCustomFee`
- Add `NodeAddressBook`
- Add deprecated `proxyAccountId`, `sendRecordThreshold`, and `receiveRecordThreshold` to `AccountInfo`
- Add `forName`, `ping`, and `pingAll` to `Client`
- Expose `HbarAllowance`, `TokenAllowance`, and `TokenNftAllowance`
- Add `ledgerId`, `toBytes` and `fromBytes` to `TokenInfo`, `TokenNftInfo`, and `TopicInfo`
### Changed
- Rename `autoRenewAccountId` on `TokenInfo` to `autoRenewAccount`
- Rename `tokenSupplyType` on `TokenInfo` to `supplyType`
- Rename `spenderAccountId` on `TokenInfo` to `spenderId`
### Added
- Add `validateStatus` to `TransactionResponse`
- Add `getRecord` to `TransactionResponse`
- Add `getRecordQuery` and `getReceiptQuery` to `TransactionResponse`
- Add an optional `timeout` parameter to `execute` in `XTransaction` and `XQuery`
- Add an optional `timeout` parameter to `getReceipt` in `TransactionResponse`
- Add `fromSolidityAddress` and `fromEvmAddress` to `ContractId`
- Add `toSolidityAddress` to `ContractId`
- Add `fromMnemonic` (without passphrase) to `PrivateKey`
- Add `getHbarApprovals`, `getTokenApprovals`, and `getNftApprovals` to `AccountAllowanceApproveTransaction`
- Add `getTokenNftAllowanceDeletions` to `AccountAllowanceDeleteTransaction`
- Add `proxyAccountId` to `ContractUpdateTransaction`
- Add `transferAccountId` and `transferContractId` to `ContractDeleteTransaction`
- Add `addSerial` to `TokenWipeTransaction`
- Add `CreateFileExample`, `CreateTopicExample`, and `GenerateKeyWithMnemonicExample` to `examples/`
### Changed
- Change `initialTransactionId` on `TopicMessage` to `TransactionId` instead of `String`
- Rename `name` and `symbol` to `tokenName` and `tokenSymbol` on `TokenUpdateTransaction`
### Added
- Add `Transaction.sign`
- Add `Transaction.signWith`
- Add `PrivateKey.sign`
- Add `PublicKey.verify`
- Add `TransactionRecord.contractFunctionResult`
- Add `TransactionRecord.assessedCustomFees`
- Add `AssessedCustomFee`
- Add `TransactionRecord.transfers`
- Add `Transfer`
- Add `TransactionRecord.tokenTransfers`
- Add `TransactionRecord.tokenNftTransfers`
- Add `TokenNftTransfer`
- Add `ContractUpdateTransaction.clearMemo`
- Add `ContractUpdateTransaction.clearAutoRenewAccountId`
- Add `ContractUpdateTransaction.clearStakedAccountId`
- Add `ContractUpdateTransaction.clearStakedNodeId`
- Add `ContractUpdateTransaction.clearDeclineStakingReward`
- Add `ScheduleSignTransaction.clearScheduleId`
- Add `TokenUpdateTransaction.clearMemo`
- Add `Status`
- Add `TransactionReceipt.transactionId`
- Add `Timestamp` (to replace use of Swift `Date` to support nanoseconds)
- Add `Duration` (to replace use of Swift `TimeInterval`)
- Add `fromBytes`, `toBytes`, `toString` to `AccountBalance`
- Add `TopicMessageQuery`
### Changed
- Rename `TransactionReceipt.newTotalSupply` to `totalSupply`
- Use `Hedera.Timestamp` where `Foundation.Date` was used
- Use `Hedera.Duration` where `Foundation.TimeInterval` was used
- Rename `AccountBalanceResponse` to `AccountBalance`
### Added
- Add `fromBytes` and `toBytes` to `AccountId`
- Add `fromBytes` and `toBytes` to `AccountInfo`
- Add `evmAddress` to `ContractFunctionResult`
- Add `ledgerId`, `stakingInfo`, `fromBytes` and `toBytes` to `ContractInfo`
- Add `fromBytes` and `toBytes` to `FileId`, `ContractId`, `TopicId`, `TokenId`, and `ScheduleId`
- Add `ledgerId`, `fromBytes` and `toBytes` to `FileInfo`
- Add `Mnemonic`
- Add `NetworkVersionInfo`
- Add `NodeAddress`
- Add `NodeAddressBookQuery`
- Add `isDerivable` and `fromMnemonic` to `PrivateKey`
- Add `getCost` to `Query`
- Add `ledgerId`, `fromBytes` and `toBytes` to `ScheduleInfo`
- Add `prerelease`, `build`, `fromBytes` and `toBytes` to `SemanticVersion`
- Add `fromBytes` and `toBytes` to `StakingInfo`
- Add `fromBytes` and `toBytes` to `TokenAssociation`
- Add `fromBytes` and `toBytes` to `TransactionReceipt`
### Changed
- Rename `expiresAt` to `expirationTime` in `FileCreateTransaction`
- Rename `expiresAt` to `expirationTime` in `FileUpdateTransaction`
- Rename `expiresAt` to `expirationTime` in `TokenCreateTransaction`
- Rename `expiresAt` to `expirationTime` in `TokenUpdateTransaction`
- Rename `expiresAt` to `expirationTime` in `TopicUpdateTransaction`
### Added
- Add `Client.forMainnet()`
- Add `Client.forPreviewnet()`
- Add `fromBytes` and `fromString` to `LedgerId`
- Add `fromBytes` and `fromString` to `NftId`
- Extend `PrivateKey` with `fromPem`, `derive`, `legacyDerive`, `toString`, `toAccountId`, and `fromBytes`
- Extend `PublicKey` with `fromBytes`, `fromString`, and `toAccountId`
### Fixed
- Build for both M1 and Intel mac iOS Simulator and iOS Device should be working
### Changed
- In `AccountAllowanceApproveTransaction`, rename `serialNumbers` to `serials`
- In `AccountAllowanceDeleteTransaction`, rename `serialNumbers` to `serials`
- In `TokenBurnTransaction`, rename `serialNumbers` to `serials`
- In `TokenWipeTransaction`, rename `serialNumbers` to `serials`
- Update to/from string conversions for `Hbar` to match other SDKs
### Added
- Add `Hbar` type. Anywhere Hbar is expected, you can write an integer/decimal/float literal or use the `Hbar` type.
- Add `LedgerId`
- Add `StakingInfo`
- Add `EthereumTransaction`
### Changed
- In `AccountDeleteTransaction`, rename `deleteAccountId` to `accountId`
- Rename alias to `aliasKey` in `AccountInfo` and properly decode in `AccountInfo`
- Rename `expiresAt` in `AccountUpdateTransaction` to `expirationTime`
- Move swift-tools-version to top of Package.swift file