Description
New Issue Checklist
- I am not disclosing a vulnerability.
- I am not just asking a question.
- I have searched through existing issues.
- I can reproduce the issue with the latest versions of Parse Server and the Parse Swift SDK.
Issue Description
ParseSwift uses PFObject instances for basically everything. All subclasses of PFObject are represented in MongoDB/PostgreSQL as collections/tables with given names. Mapping of the PFObject subclasses and their names in MongoDB/PostreSQL need to be known to Parse SDK so that PFObject subclasses can be loaded/stored properly to the database.
Prior to Xcode 16, there was no need to manually register any classes explicitly subclass PFSubclassing. After upgrading, the following error occurs when running the application:
Thread 1: "The class My_App.MyParseSubclass must be registered with registerSubclass before using Parse."
Here is a link to a similar issue the Parse-SDK-iOS-OSX project: parse-community/Parse-SDK-iOS-OSX#1792
Steps to reproduce
Build and run an application with subclasses of PFSublassing using Xcode 16.
Actual Outcome
Thread 1: "The class My_App.MyParseSubclass must be registered with registerSubclass before using Parse."
Workaround
Manually register each object subclassing PFSubclassing directly after Parse Swift initialization:
let configuration = ParseClientConfiguration {
$0.applicationId = "mapped"
$0.server = "https://myserver/myparseinstance"
}
Parse.initialize(with: configuration)
MyParseSubclass.registerSubclass()
Expected Outcome
App functioning properly without any subclassing errors.
Environment
Client
- Parse Swift SDK version: 4.14.2
- Xcode version: 16.0
- Operating system (iOS, macOS, watchOS, etc.): iOS
- Operating system version: 18
Server
- Parse Server version: 7.2.0
- Operating system: Windows
- Local or remote host (AWS, Azure, Google Cloud, Heroku, Digital Ocean, etc): local
Database
- System (MongoDB or Postgres): Postgres
- Database version: 14.13
- Local or remote host (MongoDB Atlas, mLab, AWS, Azure, Google Cloud, etc): local