Best approach to prevent SwiftData .transformable migration on iOS 26.1

We have an unreleased SwiftData app for iOS18+. While we were testing I saw reports on the forum about unexpected database migrations for codable arrays on iOS26.1.

I'd like to ask a couple of questions:

1- Does this issue originate from the new Xcode version, or is it specific to iOS 26.1?

2- Is it possible to change our attribute so that users on older iOS versions receive the same model, preventing a migration from being triggered when they upgrade to iOS 26.1?

One of our models looks like this:

struct Point: Codable, Hashable {
  let x: Int
  let y: Int
}

@Model
class Grid {
    private(set) var gridId: String = ""
    var points: [Point] = []
    var updatedAt: Date = Date()
    private(set) var createdAt: Date = Date()

    #Index<Grid>([\.gridId])
    ...
}

I can think of some options like:

// 1
@Attribute(.transformable(by: CustomJsonTransformer.self)) var points: [Point] = []
// 2
@Attribute(.externalStorage) var points: [Point] = []
// 3
var points: Data = Data() // store points as data

However, I'm not sure which one to use. What would you recommend to handle this, or is there a better strategy you would suggest?

Best approach to prevent SwiftData .transformable migration on iOS 26.1
 
 
Q