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.
# Release Notes
## Fixes
- Fixes issue regarding legal move generation for king in check due to error in moves available for the attacking piece
# Release Notes
## Fixes
- Swift 3 preview 6 and Xcode 8 beta 6 compatibility
# Release Notes
## New Features
- Added pinned(for:) method to Board
- Added `between(_:)`, `isBetween(start:end:)` and `line(with:)` methods to Square
- Added `hasMoreThanOne` to Bitboard
## Enhancements
- Made legal move generation/checking faster for king pieces
## Fixes
- Fixed conditions for castling so that a king cannot castle in check and it can't castle through squares that are being attacked
# Release Notes
## Fixes
- Swift 3 preview 4 and Xcode 8 beta 4 compatibility
# Release Notes
## New Features
- Added `init(position:whitePlayer:blackPlayer:variant:)` to `Game` #7
## Enhancements
- Greatly improved performance of `attackers(to:color:)` method for `Board`
- Improved performance for `pieceCount(for:)` for `Board`
- Improved performance for `contains(_:)` for `Bitboard`
# Release Notes
## New Features
- Added `captureForLastMove` to Game #6
# Release Notes
## New Features
- Added `execute(uncheckedMove:)` family of methods to `Game`
- Added initializer with moves array to Game
## Enhancements
- Improved performance for `bitboard(for color: Color)` method for `Board`
# Release Notes
## New Features
- Added static `white`, `black`, `kingside`, and `queenside` constants to `CastlingRights` and `CastlingRights.Right`
- Added `canCastle(for:)` methods to `CastlingRights` that take a `Color` or `Board.Side`
- Added `init(color:)` and `init(side:)` to `CastlingRights`
# Release Notes
## Fixes
- Fixed Xcode 8 beta 3 warnings for guard statements
# Release Notes
## Enhancements
- Performance greatly improved when performing operations with `Board`
## New Features
- Most significant bit operations to `Bitboard`:
- Properties: `msb`, `msbIndex`, `msbSquare`
- Methods: `popMSB()`, `popMSBIndex()`, `popMSBSquare()`
- `Board` initializer from arrays of piece characters
``` swift
Board(pieces: [["r", "n", "b", "q", "k", "b", "n", "r"],
["p", "p", "p", "p", "p", "p", "p", "p"],
[" ", " ", " ", " ", " ", " ", " ", " "],
[" ", " ", " ", " ", " ", " ", " ", " "],
[" ", " ", " ", " ", " ", " ", " ", " "],
[" ", " ", " ", " ", " ", " ", " ", " "],
["P", "P", "P", "P", "P", "P", "P", "P"],
["R", "N", "B", "Q", "K", "B", "N", "R"]])
```
- Parsing PGN string data with `PGN(parse:)`
- Exporting PGN string data with `exported()`
- New `Player` struct
## Breaking Changes
- `Piece` has been changed to a struct type with nested a `Kind` type
- Values such as `isKing` and `relativeValue` now belong to `Kind`
- The argument-less `bitboard()` method for `Board` has been changed to `occupiedSpaces`
- Replaced `Game.Mode` with two `Player` instances for a game
## Fixes
- Calling `redoMove()` would sometimes cause a crash if the `Game` instance had no available moves (e.g. was over).
- The `Board` playground view for iOS and tvOS was flipped vertically
- `canPromote(_:)` for `Piece` didn't take king into account
- Castling rights weren't restored in `undoMove()`
- `execute(move:)` didn't check the promotion piece's kind