     return ref
   }
 
-  internal func removeReference<Value: PBXObject>(_ ref: Reference<Value>?) {
+  internal func removeReference<Value>(_ ref: Reference<Value>?) {
     guard let ref = ref else { return }
     guard let count = refCounts[ref.id], count > 0 else {
       assertionFailure("refCount[\(ref.id)] is \(refCounts[ref.id]?.description ?? "nil")")

    return ref
  }

  internal func createReference<Value: PBXObject>(value: Value) -> Reference<Value> {
    let count = refCounts[value.id] ?? 0
    refCounts[value.id] = count + 1


  internal var fullFilePaths: [Guid: Path] = [:]
  internal var refCounts: [Guid: Int] = [:]

  internal func createReferences<Value>(ids: [Guid]) -> [Reference<Value>] {
    return ids.map(createReference)
  }

  internal func createOptionalReference<Value>(id: Guid?) -> Reference<Value>? {
    guard let id = id else { return nil }
    return createReference(id: id)
  }

  internal func createReference<Value>(id: Guid) -> Reference<Value> {
    let count = refCounts[id] ?? 0
    refCounts[id] = count + 1

