Вы можете использовать другой инициализатор CKShare:
CKShare(rootRecord: CKRecord, shareID: CKRecord.ID)
Зона записи является частью CKRecord.ID:
CKRecord.ID(recordName: String, zoneID: CKRecordZone.ID)
Так что-то вроде:
func createGroup(groupName: String){
let groupRecord = CKRecord(recordType: recordTypes.group)
groupRecord[groupRecordType.groupName] = groupName
let groupZone = CKRecordZone(zoneName: groupName)
let shareID = CKRecord.ID(recordName: groupName, zoneID: groupZone)
let share = CKShare(rootRecord: groupRecord, shareID: shareID)
share.publicPermission = .readWrite
}
Хотя recordName должно быть чем-то уникальным, иначе вы можете столкнуться с проблемами.