From 7cb68a3c41f72b15dcee797a9b7bb5f250510de5 Mon Sep 17 00:00:00 2001 From: theRealRobG Date: Sat, 15 May 2021 16:54:52 +0100 Subject: [PATCH 1/3] Copy BitByteData to repo (rather than SPM) The project does not support Carthage as of 1.4.3, and so a decision has been taken to (perhaps temporarily) copy the code over. I have included the MIT LICENCE, and have also only copied over the parts of the code that I have actually used in this project. --- .gitignore | 1 - Package.resolved | 16 - Package.swift | 12 +- .../BitParser/BitByteData/LICENCE | 21 + .../BitParser/BitByteData/README.md | 4 + .../BitByteData/Sources/BitReader.swift | 82 ++++ .../BitByteData/Sources/BitWriter.swift | 48 ++ .../BitByteData/Sources/ByteReader.swift | 206 +++++++++ .../BitByteData/Sources/Extensions.swift | 48 ++ .../BitByteData/Sources/LsbBitReader.swift | 426 ++++++++++++++++++ .../BitByteData/Sources/LsbBitWriter.swift | 100 ++++ .../BitByteData/Sources/MsbBitReader.swift | 426 ++++++++++++++++++ .../BitByteData/Sources/MsbBitWriter.swift | 100 ++++ .../BitParser/DataBitReader.swift | 2 - .../SCTE35Parser/BitParser/DataReader.swift | 1 - .../Mocks/MockDataBitReader.swift | 1 - 16 files changed, 1465 insertions(+), 29 deletions(-) delete mode 100644 Package.resolved create mode 100644 Sources/SCTE35Parser/BitParser/BitByteData/LICENCE create mode 100644 Sources/SCTE35Parser/BitParser/BitByteData/README.md create mode 100644 Sources/SCTE35Parser/BitParser/BitByteData/Sources/BitReader.swift create mode 100755 Sources/SCTE35Parser/BitParser/BitByteData/Sources/BitWriter.swift create mode 100644 Sources/SCTE35Parser/BitParser/BitByteData/Sources/ByteReader.swift create mode 100644 Sources/SCTE35Parser/BitParser/BitByteData/Sources/Extensions.swift create mode 100644 Sources/SCTE35Parser/BitParser/BitByteData/Sources/LsbBitReader.swift create mode 100644 Sources/SCTE35Parser/BitParser/BitByteData/Sources/LsbBitWriter.swift create mode 100644 Sources/SCTE35Parser/BitParser/BitByteData/Sources/MsbBitReader.swift create mode 100644 Sources/SCTE35Parser/BitParser/BitByteData/Sources/MsbBitWriter.swift diff --git a/.gitignore b/.gitignore index 95c4320..ea8c4eb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ .DS_Store /.build /Packages -/*.xcodeproj xcuserdata/ diff --git a/Package.resolved b/Package.resolved deleted file mode 100644 index e16f707..0000000 --- a/Package.resolved +++ /dev/null @@ -1,16 +0,0 @@ -{ - "object": { - "pins": [ - { - "package": "BitByteData", - "repositoryURL": "https://github.com/tsolomko/BitByteData.git", - "state": { - "branch": null, - "revision": "3ee55b113ae52d5c1f4cbec0ed4eae613dcd7eff", - "version": "1.4.3" - } - } - ] - }, - "version": 1 -} diff --git a/Package.swift b/Package.swift index 1a1170f..19fbeab 100644 --- a/Package.swift +++ b/Package.swift @@ -11,17 +11,13 @@ let package = Package( targets: ["SCTE35Parser"] ) ], - dependencies: [ - .package( - name: "BitByteData", - url: "https://github.com/tsolomko/BitByteData.git", - .exact(Version(1, 4, 3)) - ) - ], targets: [ .target( name: "SCTE35Parser", - dependencies: ["BitByteData"] + exclude: [ + "BitParser/BitByteData/LICENCE", + "BitParser/BitByteData/README.md" + ] ), .testTarget( name: "SCTE35ParserTests", diff --git a/Sources/SCTE35Parser/BitParser/BitByteData/LICENCE b/Sources/SCTE35Parser/BitParser/BitByteData/LICENCE new file mode 100644 index 0000000..005f75c --- /dev/null +++ b/Sources/SCTE35Parser/BitParser/BitByteData/LICENCE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Timofey Solomko + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Sources/SCTE35Parser/BitParser/BitByteData/README.md b/Sources/SCTE35Parser/BitParser/BitByteData/README.md new file mode 100644 index 0000000..ed3c0d3 --- /dev/null +++ b/Sources/SCTE35Parser/BitParser/BitByteData/README.md @@ -0,0 +1,4 @@ +# BitByteData +Code in this directory has been lifted directly from https://github.com/tsolomko/BitByteData/releases/tag/1.4.3. + +The project does not support Carthage as of 1.4.3, and so a decision has been taken to (perhaps temporarily) copy the code over. I have included the MIT LICENCE, and have also only copied over the parts of the code that I have actually used in this project. diff --git a/Sources/SCTE35Parser/BitParser/BitByteData/Sources/BitReader.swift b/Sources/SCTE35Parser/BitParser/BitByteData/Sources/BitReader.swift new file mode 100644 index 0000000..46a472b --- /dev/null +++ b/Sources/SCTE35Parser/BitParser/BitByteData/Sources/BitReader.swift @@ -0,0 +1,82 @@ +// Copyright (c) 2020 Timofey Solomko +// Licensed under MIT License +// +// See LICENSE for license information + +import Foundation + +/// A type that contains functions for reading `Data` bit-by-bit and byte-by-byte. +public protocol BitReader: AnyObject { + + /// True, if reader's BIT pointer is aligned with the BYTE border. + var isAligned: Bool { get } + + /// Amount of bits left to read. + var bitsLeft: Int { get } + + /// Amount of bits that were already read. + var bitsRead: Int { get } + + /// Creates an instance for reading bits (and bytes) from `data`. + init(data: Data) + + /** + Converts a `ByteReader` instance into `BitReader`, enabling bits reading capabilities. Current `offset` value of + `byteReader` is preserved. + */ + init(_ byteReader: ByteReader) + + /// Reads bit and returns it, advancing by one BIT position. + func bit() -> UInt8 + + /// Reads `count` bits and returns them as an array of `UInt8`, advancing by `count` BIT positions. + func bits(count: Int) -> [UInt8] + + /// Reads `fromBits` bits and returns them as an `Int` number, advancing by `fromBits` BIT positions. + func int(fromBits count: Int) -> Int + + /// Reads `fromBits` bits and returns them as an `UInt8` number, advancing by `fromBits` BIT positions. + func byte(fromBits count: Int) -> UInt8 + + /// Reads `fromBits` bits and returns them as an `UInt16` number, advancing by `fromBits` BIT positions. + func uint16(fromBits count: Int) -> UInt16 + + /// Reads `fromBits` bits and returns them as an `UInt32` number, advancing by `fromBits` BIT positions. + func uint32(fromBits count: Int) -> UInt32 + + /// Reads `fromBits` bits and returns them as an `UInt64` number, advancing by `fromBits` BIT positions. + func uint64(fromBits count: Int) -> UInt64 + + /// Aligns reader's BIT pointer to the BYTE border, i.e. moves BIT pointer to the first BIT of the next BYTE. + func align() + + // MARK: ByteReader's methods. + + /// Reads byte and returns it, advancing by one BYTE position. + func byte() -> UInt8 + + /// Reads `count` bytes and returns them as an array of `UInt8`, advancing by `count` BYTE positions. + func bytes(count: Int) -> [UInt8] + + /// Reads `fromBytes` bytes and returns them as an `Int` number, advancing by `fromBytes` BYTE positions. + func int(fromBytes count: Int) -> Int + + /// Reads 8 bytes and returns them as a `UInt64` number, advancing by 8 BYTE positions. + func uint64() -> UInt64 + + /// Reads `fromBytes` bytes and returns them as a `UInt64` number, advancing by 8 BYTE positions. + func uint64(fromBytes count: Int) -> UInt64 + + /// Reads 4 bytes and returns them as a `UInt32` number, advancing by 4 BYTE positions. + func uint32() -> UInt32 + + /// Reads `fromBytes` bytes and returns them as a `UInt32` number, advancing by 8 BYTE positions. + func uint32(fromBytes count: Int) -> UInt32 + + /// Reads 2 bytes and returns them as a `UInt16` number, advancing by 2 BYTE positions. + func uint16() -> UInt16 + + /// Reads `fromBytes` bytes and returns them as a `UInt16` number, advancing by 8 BYTE positions. + func uint16(fromBytes count: Int) -> UInt16 + +} diff --git a/Sources/SCTE35Parser/BitParser/BitByteData/Sources/BitWriter.swift b/Sources/SCTE35Parser/BitParser/BitByteData/Sources/BitWriter.swift new file mode 100755 index 0000000..98d64dc --- /dev/null +++ b/Sources/SCTE35Parser/BitParser/BitByteData/Sources/BitWriter.swift @@ -0,0 +1,48 @@ +// Copyright (c) 2020 Timofey Solomko +// Licensed under MIT License +// +// See LICENSE for license information + +import Foundation + +/// A type that contains functions for writing `Data` bit-by-bit (and byte-by-byte). +public protocol BitWriter { + + /// Data which contains writer's output (the last byte in progress is not included). + var data: Data { get } + + /// True, if writer's BIT pointer is aligned with the BYTE border. + var isAligned: Bool { get } + + /// Creates an instance for writing bits (and bytes). + init() + + /// Writes `bit`, advancing by one BIT position. + func write(bit: UInt8) + + /// Writes `bits`, advancing by `bits.count` BIT positions. + func write(bits: [UInt8]) + + /// Writes `number`, using and advancing by `bitsCount` BIT positions. + func write(number: Int, bitsCount: Int) + + /// Writes `byte`, advancing by one BYTE position. + func append(byte: UInt8) + + /** + Aligns writer's BIT pointer to the BYTE border, i.e. moves BIT pointer to the first BIT of the next BYTE, + filling all skipped BIT positions with zeros. + */ + func align() + +} + +extension BitWriter { + + public func write(bits: [UInt8]) { + for bit in bits { + self.write(bit: bit) + } + } + +} diff --git a/Sources/SCTE35Parser/BitParser/BitByteData/Sources/ByteReader.swift b/Sources/SCTE35Parser/BitParser/BitByteData/Sources/ByteReader.swift new file mode 100644 index 0000000..a5dd077 --- /dev/null +++ b/Sources/SCTE35Parser/BitParser/BitByteData/Sources/ByteReader.swift @@ -0,0 +1,206 @@ +// Copyright (c) 2020 Timofey Solomko +// Licensed under MIT License +// +// See LICENSE for license information + +import Foundation + +/// A type that contains functions for reading `Data` byte-by-byte. +public class ByteReader { + + /// Size of the `data` (in bytes). + public let size: Int + + /// Data which is being read. + public let data: Data + + /// Offset to the byte in `data` which will be read next. + public var offset: Int + + /** + True, if `offset` points at any position after the last byte in `data`. + + - Note: It generally means that all bytes have been read. + */ + public var isFinished: Bool { + return { (data: Data, offset: Int) -> Bool in + return data.endIndex <= offset + } (self.data, self.offset) + } + + /// Amount of bytes left to read. + public var bytesLeft: Int { + return { (data: Data, offset: Int) -> Int in + return data.endIndex - offset + } (self.data, self.offset) + } + + /// Amount of bytes that were already read. + public var bytesRead: Int { + return { (data: Data, offset: Int) -> Int in + return offset - data.startIndex + } (self.data, self.offset) + } + + /// Creates an instance for reading bytes from `data`. + public init(data: Data) { + self.size = data.count + self.data = data + self.offset = data.startIndex + } + + /** + Reads byte and returns it, advancing by one position. + + - Precondition: There MUST be enough data left. + */ + public func byte() -> UInt8 { + return { (data: Data, offset: inout Int) -> UInt8 in + precondition(offset < data.endIndex) + defer { offset += 1 } + return data[offset] + } (self.data, &self.offset) + } + + /** + Reads `count` bytes and returns them as an array of `UInt8`, advancing by `count` positions. + + - Precondition: Parameter `count` MUST not be less than 0. + - Precondition: There MUST be enough data left. + */ + public func bytes(count: Int) -> [UInt8] { + precondition(count >= 0) + return { (data: Data, offset: inout Int) -> [UInt8] in + precondition(data.endIndex - offset >= count) + defer { offset += count } + return data[offset.. Int { + precondition(count >= 0) + // TODO: If uintX() could be force inlined or something in the future then probably it would make sense + // to use them for `count` == 2, 4 or 8. + return { (data: Data, offset: inout Int) -> Int in + precondition(data.endIndex - offset >= count) + var result = 0 + for i in 0.. UInt64 { + return { (data: Data, offset: inout Int) -> UInt64 in + precondition(data.endIndex - offset >= 8) + defer { offset += 8 } + return data[offset.. UInt64 { + precondition(0...8 ~= count) + return { (data: Data, offset: inout Int) -> UInt64 in + precondition(data.endIndex - offset >= count) + var result = 0 as UInt64 + for i in 0.. UInt32 { + return { (data: Data, offset: inout Int) -> UInt32 in + precondition(data.endIndex - offset >= 4) + defer { offset += 4 } + return data[offset.. UInt32 { + precondition(0...4 ~= count) + return { (data: Data, offset: inout Int) -> UInt32 in + precondition(data.endIndex - offset >= count) + var result = 0 as UInt32 + for i in 0.. UInt16 { + return { (data: Data, offset: inout Int) -> UInt16 in + precondition(data.endIndex - offset >= 2) + defer { offset += 2 } + return data[offset.. UInt16 { + precondition(0...2 ~= count) + return { (data: Data, offset: inout Int) -> UInt16 in + precondition(data.endIndex - offset >= count) + var result = 0 as UInt16 + for i in 0.. UInt16 { + #if compiler(>=5.0) + return self.withUnsafeBytes { $0.bindMemory(to: UInt16.self)[0] } + #else + return self.withUnsafeBytes { $0.pointee } + #endif + } + + @inline(__always) + func toU32() -> UInt32 { + #if compiler(>=5.0) + return self.withUnsafeBytes { $0.bindMemory(to: UInt32.self)[0] } + #else + return self.withUnsafeBytes { $0.pointee } + #endif + } + + @inline(__always) + func toU64() -> UInt64 { + #if compiler(>=5.0) + return self.withUnsafeBytes { $0.bindMemory(to: UInt64.self)[0] } + #else + return self.withUnsafeBytes { $0.pointee } + #endif + } + + @inline(__always) + func toByteArray(_ count: Int) -> [UInt8] { + #if compiler(>=5.0) + return self.withUnsafeBytes { $0.map { $0 } } + #else + return self.withUnsafeBytes { + [UInt8](UnsafeBufferPointer(start: $0, count: count)) + } + #endif + } + +} diff --git a/Sources/SCTE35Parser/BitParser/BitByteData/Sources/LsbBitReader.swift b/Sources/SCTE35Parser/BitParser/BitByteData/Sources/LsbBitReader.swift new file mode 100644 index 0000000..55cd52d --- /dev/null +++ b/Sources/SCTE35Parser/BitParser/BitByteData/Sources/LsbBitReader.swift @@ -0,0 +1,426 @@ +// Copyright (c) 2020 Timofey Solomko +// Licensed under MIT License +// +// See LICENSE for license information + +import Foundation + +/// A type that contains functions for reading `Data` bit-by-bit and byte-by-byte, assuming "LSB0" bit numbering scheme. +public final class LsbBitReader: ByteReader, BitReader { + + private var bitMask: UInt8 = 1 + private var currentByte: UInt8 + + /// True, if reader's BIT pointer is aligned with the BYTE border. + public var isAligned: Bool { + return self.bitMask == 1 + } + + /// Amount of bits left to read. + public var bitsLeft: Int { + return self.bytesLeft * 8 - self.bitMask.trailingZeroBitCount + } + + /// Amount of bits that were already read. + public var bitsRead: Int { + return self.bytesRead * 8 + self.bitMask.trailingZeroBitCount + } + + /// Creates an instance for reading bits (and bytes) from `data`. + public override init(data: Data) { + self.currentByte = data.first ?? 0 + super.init(data: data) + } + + /** + Converts a `ByteReader` instance into `LsbBitReader`, enabling bit reading capabilities. Current `offset` value of + `byteReader` is preserved. + */ + public init(_ byteReader: ByteReader) { + self.currentByte = byteReader.isFinished ? 0 : byteReader.data[byteReader.offset] + super.init(data: byteReader.data) + self.offset = byteReader.offset + } + + /** + Advances reader's BIT pointer by specified amount of bits (default is 1). + + - Warning: Doesn't check if there is any data left. It is advised to use `isFinished` AFTER calling this method + to check if the end was reached. + */ + public func advance(by count: Int = 1) { + for _ in 0.. UInt8 { + precondition(bitsLeft >= 1) + let bit: UInt8 = self.currentByte & self.bitMask > 0 ? 1 : 0 + + if self.bitMask == 128 { + self.offset += 1 + self.bitMask = 1 + } else { + self.bitMask <<= 1 + } + + return bit + } + + /** + Reads `count` bits and returns them as an array of `UInt8`, advancing by `count` BIT positions. + + - Precondition: Parameter `count` MUST not be less than 0. + - Precondition: There MUST be enough data left. + */ + public func bits(count: Int) -> [UInt8] { + precondition(count >= 0) + precondition(bitsLeft >= count) + + var array = [UInt8]() + array.reserveCapacity(count) + for _ in 0.. Int { + precondition(0...Int.bitWidth ~= count) + precondition(bitsLeft >= count) + + var result = 0 + for i in 0.. 0 ? 1 : 0 + result += (1 << i) * bit + + if self.bitMask == 128 { + self.offset += 1 + self.bitMask = 1 + } else { + self.bitMask <<= 1 + } + } + + return result + } + + /** + Reads `fromBits` bits and returns them as an `UInt8` number, advancing by `fromBits` BIT positions. + + - Precondition: Parameter `fromBits` MUST be from `0...8` range, i.e. it MUST not exceed maximum bit width of + `UInt8` type on the current platform. + - Precondition: There MUST be enough data left. + */ + public func byte(fromBits count: Int) -> UInt8 { + precondition(0...8 ~= count) + precondition(bitsLeft >= count) + + var result = 0 as UInt8 + for i in 0.. 0 ? 1 : 0 + result += (1 << i) * bit + + if self.bitMask == 128 { + self.offset += 1 + self.bitMask = 1 + } else { + self.bitMask <<= 1 + } + } + + return result + } + + /** + Reads `fromBits` bits and returns them as an `UInt16` number, advancing by `fromBits` BIT positions. + + - Precondition: Parameter `fromBits` MUST be from `0...16` range, i.e. it MUST not exceed maximum bit width of + `UInt16` type on the current platform. + - Precondition: There MUST be enough data left. + */ + public func uint16(fromBits count: Int) -> UInt16 { + precondition(0...16 ~= count) + precondition(bitsLeft >= count) + + var result = 0 as UInt16 + for i in 0.. 0 ? 1 : 0 + result += (1 << i) * bit + + if self.bitMask == 128 { + self.offset += 1 + self.bitMask = 1 + } else { + self.bitMask <<= 1 + } + } + + return result + } + + /** + Reads `fromBits` bits and returns them as an `UInt32` number, advancing by `fromBits` BIT positions. + + - Precondition: Parameter `fromBits` MUST be from `0...32` range, i.e. it MUST not exceed maximum bit width of + `UInt32` type on the current platform. + - Precondition: There MUST be enough data left. + */ + public func uint32(fromBits count: Int) -> UInt32 { + precondition(0...32 ~= count) + precondition(bitsLeft >= count) + + var result = 0 as UInt32 + for i in 0.. 0 ? 1 : 0 + result += (1 << i) * bit + + if self.bitMask == 128 { + self.offset += 1 + self.bitMask = 1 + } else { + self.bitMask <<= 1 + } + } + + return result + } + + /** + Reads `fromBits` bits and returns them as an `UInt64` number, advancing by `fromBits` BIT positions. + + - Precondition: Parameter `fromBits` MUST be from `0...64` range, i.e. it MUST not exceed maximum bit width of + `UInt64` type on the current platform. + - Precondition: There MUST be enough data left. + */ + public func uint64(fromBits count: Int) -> UInt64 { + precondition(0...64 ~= count) + precondition(bitsLeft >= count) + + var result = 0 as UInt64 + for i in 0.. 0 ? 1 : 0 + result += (1 << i) * bit + + if self.bitMask == 128 { + self.offset += 1 + self.bitMask = 1 + } else { + self.bitMask <<= 1 + } + } + + return result + } + + /** + Aligns reader's BIT pointer to the BYTE border, i.e. moves BIT pointer to the first BIT of the next BYTE. + + - Note: If reader is already aligned, then does nothing. + - Warning: Doesn't check if there is any data left. It is advised to use `isFinished` AFTER calling this method + to check if the end was reached. + */ + public func align() { + guard self.bitMask != 1 + else { return } + + self.bitMask = 1 + self.offset += 1 + } + + // MARK: ByteReader's methods. + + /** + Offset to the byte in `data` which will be read next. + + - Note: The byte which is currently used for reading bits from is included into `bytesRead`. + */ + public override var offset: Int { + didSet { + if !self.isFinished { + { (data: Data, offset: Int, currentByte: inout UInt8) in + currentByte = data[offset] + } (self.data, self.offset, &self.currentByte) + } + } + } + + /** + Reads byte and returns it, advancing by one BYTE position. + + - Precondition: Reader MUST be aligned. + - Precondition: There MUST be enough data left. + */ + public override func byte() -> UInt8 { + return { (data: Data, offset: inout Int, bitMask: UInt8) -> UInt8 in + precondition(bitMask == 1, "BitReader is not aligned.") + precondition(offset < data.endIndex) + defer { offset += 1 } + return data[offset] + } (self.data, &self.offset, self.bitMask) + } + + /** + Reads `count` bytes and returns them as an array of `UInt8`, advancing by `count` BYTE positions. + + - Precondition: Reader MUST be aligned. + - Precondition: There MUST be enough data left. + */ + public override func bytes(count: Int) -> [UInt8] { + return { (data: Data, offset: inout Int, bitMask: UInt8) -> [UInt8] in + precondition(bitMask == 1, "BitReader is not aligned.") + precondition(data.endIndex - offset >= count) + defer { offset += count } + return data[offset.. Int { + precondition(count >= 0) + return { (data: Data, offset: inout Int, bitMask: UInt8) -> Int in + precondition(bitMask == 1, "BitReader is not aligned.") + precondition(data.endIndex - offset >= count) + var result = 0 + for i in 0.. UInt64 { + return { (data: Data, offset: inout Int, bitMask: UInt8) -> UInt64 in + precondition(bitMask == 1, "BitReader is not aligned.") + precondition(data.endIndex - offset >= 8) + defer { offset += 8 } + return data[offset.. UInt64 { + precondition(0...8 ~= count) + return { (data: Data, offset: inout Int, bitMask: UInt8) -> UInt64 in + precondition(bitMask == 1, "BitReader is not aligned.") + precondition(data.endIndex - offset >= count) + var result = 0 as UInt64 + for i in 0.. UInt32 { + return { (data: Data, offset: inout Int, bitMask: UInt8) -> UInt32 in + precondition(bitMask == 1, "BitReader is not aligned.") + precondition(data.endIndex - offset >= 4) + defer { offset += 4 } + return data[offset.. UInt32 { + precondition(0...4 ~= count) + return { (data: Data, offset: inout Int, bitMask: UInt8) -> UInt32 in + precondition(bitMask == 1, "BitReader is not aligned.") + precondition(data.endIndex - offset >= count) + var result = 0 as UInt32 + for i in 0.. UInt16 { + return { (data: Data, offset: inout Int, bitMask: UInt8) -> UInt16 in + precondition(bitMask == 1, "BitReader is not aligned.") + precondition(data.endIndex - offset >= 2) + defer { offset += 2 } + return data[offset.. UInt16 { + precondition(0...2 ~= count) + return { (data: Data, offset: inout Int, bitMask: UInt8) -> UInt16 in + precondition(bitMask == 1, "BitReader is not aligned.") + precondition(data.endIndex - offset >= count) + var result = 0 as UInt16 + for i in 0.. 0 ? 1 : 0) + mask <<= 1 + } + } + + /** + Writes `number`, using and advancing by `bitsCount` BIT positions. + + - Note: If `bitsCount` is smaller than the actual amount of `number`'s bits than the `number` will be truncated to + fit into `bitsCount` amount of bits. + - Note: Bits of `number` are processed using the same bit-numbering scheme as of the writer (i.e. "LSB 0"). + - Note: This method is especially useful when it is necessary to write an unsigned number which overflows and, + thus, crashes when converting to an `Int` if `write(number:bitsCount:)` method is used. + */ + public func write(unsignedNumber: UInt, bitsCount: Int) { + var mask: UInt = 1 + for _ in 0.. 0 ? 1 : 0) + mask <<= 1 + } + } + + /** + Writes `byte`, advancing by one BYTE position. + + - Precondition: Writer MUST be aligned. + */ + public func append(byte: UInt8) { + precondition(isAligned, "BitWriter is not aligned.") + self.data.append(byte) + } + + /** + Aligns writer's BIT pointer to the BYTE border, i.e. moves BIT pointer to the first BIT of the next BYTE, + filling all skipped BIT positions with zeros. + + - Note: If writer is already aligned, then does nothing. + */ + public func align() { + guard self.bitMask != 1 + else { return } + + self.data.append(self.currentByte) + self.currentByte = 0 + self.bitMask = 1 + } + +} diff --git a/Sources/SCTE35Parser/BitParser/BitByteData/Sources/MsbBitReader.swift b/Sources/SCTE35Parser/BitParser/BitByteData/Sources/MsbBitReader.swift new file mode 100644 index 0000000..57b0005 --- /dev/null +++ b/Sources/SCTE35Parser/BitParser/BitByteData/Sources/MsbBitReader.swift @@ -0,0 +1,426 @@ +// Copyright (c) 2020 Timofey Solomko +// Licensed under MIT License +// +// See LICENSE for license information + +import Foundation + +/// A type that contains functions for reading `Data` bit-by-bit and byte-by-byte, assuming "MSB0" bit numbering scheme. +public final class MsbBitReader: ByteReader, BitReader { + + private var bitMask: UInt8 = 128 + private var currentByte: UInt8 + + /// True, if reader's BIT pointer is aligned with the BYTE border. + public var isAligned: Bool { + return self.bitMask == 128 + } + + /// Amount of bits left to read. + public var bitsLeft: Int { + return self.bytesLeft * 8 - self.bitMask.leadingZeroBitCount + } + + /// Amount of bits that were already read. + public var bitsRead: Int { + return self.bytesRead * 8 + self.bitMask.leadingZeroBitCount + } + + /// Creates an instance for reading bits (and bytes) from `data`. + public override init(data: Data) { + self.currentByte = data.first ?? 0 + super.init(data: data) + } + + /** + Converts a `ByteReader` instance into `MsbBitReader`, enabling bit reading capabilities. Current `offset` value of + `byteReader` is preserved. + */ + public init(_ byteReader: ByteReader) { + self.currentByte = byteReader.isFinished ? 0 : byteReader.data[byteReader.offset] + super.init(data: byteReader.data) + self.offset = byteReader.offset + } + + /** + Advances reader's BIT pointer by specified amount of bits (default is 1). + + - Warning: Doesn't check if there is any data left. It is advised to use `isFinished` AFTER calling this method + to check if the end was reached. + */ + public func advance(by count: Int = 1) { + for _ in 0..>= 1 + } + } + } + + /** + Reads bit and returns it, advancing by one BIT position. + + - Precondition: There MUST be enough data left. + */ + public func bit() -> UInt8 { + precondition(bitsLeft >= 1) + let bit: UInt8 = self.currentByte & self.bitMask > 0 ? 1 : 0 + + if self.bitMask == 1 { + self.offset += 1 + self.bitMask = 128 + } else { + self.bitMask >>= 1 + } + + return bit + } + + /** + Reads `count` bits and returns them as an array of `UInt8`, advancing by `count` BIT positions. + + - Precondition: Parameter `count` MUST not be less than 0. + - Precondition: There MUST be enough data left. + */ + public func bits(count: Int) -> [UInt8] { + precondition(count >= 0) + precondition(bitsLeft >= count) + + var array = [UInt8]() + array.reserveCapacity(count) + for _ in 0.. Int { + precondition(0...Int.bitWidth ~= count) + precondition(bitsLeft >= count) + + var result = 0 + for i in 0.. 0 ? 1 : 0 + result += (1 << (count - i - 1)) * bit + + if self.bitMask == 1 { + self.offset += 1 + self.bitMask = 128 + } else { + self.bitMask >>= 1 + } + } + + return result + } + + /** + Reads `fromBits` bits and returns them as an `UInt8` number, advancing by `fromBits` BIT positions. + + - Precondition: Parameter `fromBits` MUST be from `0...8` range, i.e. it MUST not exceed maximum bit width of + `UInt8` type on the current platform. + - Precondition: There MUST be enough data left. + */ + public func byte(fromBits count: Int) -> UInt8 { + precondition(0...8 ~= count) + precondition(bitsLeft >= count) + + var result = 0 as UInt8 + for i in 0.. 0 ? 1 : 0 + result += (1 << (count - i - 1)) * bit + + if self.bitMask == 1 { + self.offset += 1 + self.bitMask = 128 + } else { + self.bitMask >>= 1 + } + } + + return result + } + + /** + Reads `fromBits` bits and returns them as an `UInt16` number, advancing by `fromBits` BIT positions. + + - Precondition: Parameter `fromBits` MUST be from `0...16` range, i.e. it MUST not exceed maximum bit width of + `UInt16` type on the current platform. + - Precondition: There MUST be enough data left. + */ + public func uint16(fromBits count: Int) -> UInt16 { + precondition(0...16 ~= count) + precondition(bitsLeft >= count) + + var result = 0 as UInt16 + for i in 0.. 0 ? 1 : 0 + result += (1 << (count - i - 1)) * bit + + if self.bitMask == 1 { + self.offset += 1 + self.bitMask = 128 + } else { + self.bitMask >>= 1 + } + } + + return result + } + + /** + Reads `fromBits` bits and returns them as an `UInt32` number, advancing by `fromBits` BIT positions. + + - Precondition: Parameter `fromBits` MUST be from `0...32` range, i.e. it MUST not exceed maximum bit width of + `UInt32` type on the current platform. + - Precondition: There MUST be enough data left. + */ + public func uint32(fromBits count: Int) -> UInt32 { + precondition(0...32 ~= count) + precondition(bitsLeft >= count) + + var result = 0 as UInt32 + for i in 0.. 0 ? 1 : 0 + result += (1 << (count - i - 1)) * bit + + if self.bitMask == 1 { + self.offset += 1 + self.bitMask = 128 + } else { + self.bitMask >>= 1 + } + } + + return result + } + + /** + Reads `fromBits` bits and returns them as an `UInt64` number, advancing by `fromBits` BIT positions. + + - Precondition: Parameter `fromBits` MUST be from `0...64` range, i.e. it MUST not exceed maximum bit width of + `UInt64` type on the current platform. + - Precondition: There MUST be enough data left. + */ + public func uint64(fromBits count: Int) -> UInt64 { + precondition(0...64 ~= count) + precondition(bitsLeft >= count) + + var result = 0 as UInt64 + for i in 0.. 0 ? 1 : 0 + result += (1 << (count - i - 1)) * bit + + if self.bitMask == 1 { + self.offset += 1 + self.bitMask = 128 + } else { + self.bitMask >>= 1 + } + } + + return result + } + + /** + Aligns reader's BIT pointer to the BYTE border, i.e. moves BIT pointer to the first BIT of the next BYTE. + + - Note: If reader is already aligned, then does nothing. + - Warning: Doesn't check if there is any data left. It is advised to use `isFinished` AFTER calling this method + to check if the end was reached. + */ + public func align() { + guard self.bitMask != 128 + else { return } + + self.bitMask = 128 + self.offset += 1 + } + + // MARK: ByteReader's methods. + + /** + Offset to the byte in `data` which will be read next. + + - Note: The byte which is currently used for reading bits from is included into `bytesRead`. + */ + public override var offset: Int { + didSet { + if !self.isFinished { + { (data: Data, offset: Int, currentByte: inout UInt8) in + currentByte = data[offset] + } (self.data, self.offset, &self.currentByte) + } + } + } + + /** + Reads byte and returns it, advancing by one BYTE position. + + - Precondition: Reader MUST be aligned. + - Precondition: There MUST be enough data left. + */ + public override func byte() -> UInt8 { + return { (data: Data, offset: inout Int, bitMask: UInt8) -> UInt8 in + precondition(bitMask == 128, "BitReader is not aligned.") + precondition(offset < data.endIndex) + defer { offset += 1 } + return data[offset] + } (self.data, &self.offset, self.bitMask) + } + + /** + Reads `count` bytes and returns them as an array of `UInt8`, advancing by `count` BYTE positions. + + - Precondition: Reader MUST be aligned. + - Precondition: There MUST be enough data left. + */ + public override func bytes(count: Int) -> [UInt8] { + return { (data: Data, offset: inout Int, bitMask: UInt8) -> [UInt8] in + precondition(bitMask == 128, "BitReader is not aligned.") + precondition(data.endIndex - offset >= count) + defer { offset += count } + return data[offset.. Int { + precondition(count >= 0) + return { (data: Data, offset: inout Int, bitMask: UInt8) -> Int in + precondition(bitMask == 128, "BitReader is not aligned.") + precondition(data.endIndex - offset >= count) + var result = 0 + for i in 0.. UInt64 { + return { (data: Data, offset: inout Int, bitMask: UInt8) -> UInt64 in + precondition(bitMask == 128, "BitReader is not aligned.") + precondition(data.endIndex - offset >= 8) + defer { offset += 8 } + return data[offset.. UInt64 { + precondition(0...8 ~= count) + return { (data: Data, offset: inout Int, bitMask: UInt8) -> UInt64 in + precondition(bitMask == 128, "BitReader is not aligned.") + precondition(data.endIndex - offset >= count) + var result = 0 as UInt64 + for i in 0.. UInt32 { + return { (data: Data, offset: inout Int, bitMask: UInt8) -> UInt32 in + precondition(bitMask == 128, "BitReader is not aligned.") + precondition(data.endIndex - offset >= 4) + defer { offset += 4 } + return data[offset.. UInt32 { + precondition(0...4 ~= count) + return { (data: Data, offset: inout Int, bitMask: UInt8) -> UInt32 in + precondition(bitMask == 128, "BitReader is not aligned.") + precondition(data.endIndex - offset >= count) + var result = 0 as UInt32 + for i in 0.. UInt16 { + return { (data: Data, offset: inout Int, bitMask: UInt8) -> UInt16 in + precondition(bitMask == 128, "BitReader is not aligned.") + precondition(data.endIndex - offset >= 2) + defer { offset += 2 } + return data[offset.. UInt16 { + precondition(0...2 ~= count) + return { (data: Data, offset: inout Int, bitMask: UInt8) -> UInt16 in + precondition(bitMask == 128, "BitReader is not aligned.") + precondition(data.endIndex - offset >= count) + var result = 0 as UInt16 + for i in 0..>= 1 + } + } + + /** + Writes `number`, using and advancing by `bitsCount` BIT positions. + + - Note: If `bitsCount` is smaller than the actual amount of `number`'s bits than the `number` will be truncated to + fit into `bitsCount` amount of bits. + - Note: Bits of `number` are processed using the same bit-numbering scheme as of the writer (i.e. "MSB 0"). + */ + public func write(number: Int, bitsCount: Int) { + var mask = 1 << (bitsCount - 1) + for _ in 0.. 0 ? 1 : 0) + mask >>= 1 + } + } + + /** + Writes `number`, using and advancing by `bitsCount` BIT positions. + + - Note: If `bitsCount` is smaller than the actual amount of `number`'s bits than the `number` will be truncated to + fit into `bitsCount` amount of bits. + - Note: Bits of `number` are processed using the same bit-numbering scheme as of the writer (i.e. "MSB 0"). + - Note: This method is especially useful when it is necessary to write an unsigned number which overflows and, + thus, crashes when converting to an `Int` if `write(number:bitsCount:)` method is used. + */ + public func write(unsignedNumber: UInt, bitsCount: Int) { + var mask: UInt = 1 << (UInt(truncatingIfNeeded: bitsCount) - 1) + for _ in 0.. 0 ? 1 : 0) + mask >>= 1 + } + } + + /** + Writes `byte`, advancing by one BYTE position. + + - Precondition: Writer MUST be aligned. + */ + public func append(byte: UInt8) { + precondition(isAligned, "BitWriter is not aligned.") + self.data.append(byte) + } + + /** + Aligns writer's BIT pointer to the BYTE border, i.e. moves BIT pointer to the first BIT of the next BYTE, + filling all skipped BIT positions with zeros. + + - Note: If writer is already aligned, then does nothing. + */ + public func align() { + guard self.bitMask != 128 + else { return } + + self.data.append(self.currentByte) + self.currentByte = 0 + self.bitMask = 128 + } + +} diff --git a/Sources/SCTE35Parser/BitParser/DataBitReader.swift b/Sources/SCTE35Parser/BitParser/DataBitReader.swift index 19d0b06..de23268 100644 --- a/Sources/SCTE35Parser/BitParser/DataBitReader.swift +++ b/Sources/SCTE35Parser/BitParser/DataBitReader.swift @@ -5,8 +5,6 @@ // Created by Robert Galluccio on 06/02/2021. // -import BitByteData - protocol DataBitReader: BitReader { /// A list of errors that have not caused the message to be un-parsable, but are inconsistent with the /// specification. An example of this could be a splice command who's computed length after parsing did diff --git a/Sources/SCTE35Parser/BitParser/DataReader.swift b/Sources/SCTE35Parser/BitParser/DataReader.swift index b898d52..afdda76 100644 --- a/Sources/SCTE35Parser/BitParser/DataReader.swift +++ b/Sources/SCTE35Parser/BitParser/DataReader.swift @@ -5,7 +5,6 @@ // Created by Robert Galluccio on 01/05/2021. // -import BitByteData import Foundation class DataReader: DataBitReader, Equatable { diff --git a/Tests/SCTE35ParserTests/Mocks/MockDataBitReader.swift b/Tests/SCTE35ParserTests/Mocks/MockDataBitReader.swift index 6c35194..8b00a2c 100644 --- a/Tests/SCTE35ParserTests/Mocks/MockDataBitReader.swift +++ b/Tests/SCTE35ParserTests/Mocks/MockDataBitReader.swift @@ -6,7 +6,6 @@ // @testable import SCTE35Parser -import BitByteData import Foundation class MockDataBitReader: DataBitReader { From 736cbbbea0fe00ec733331f466b7eb265815c77d Mon Sep 17 00:00:00 2001 From: theRealRobG Date: Sat, 15 May 2021 17:25:27 +0100 Subject: [PATCH 2/3] Created Xcodeproj for benefit of Carthage --- .../SCTE35ParserTests_Info.plist | 25 + .../SCTE35Parser_Info.plist | 26 + SCTE35Parser.xcodeproj/project.pbxproj | 1387 +++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcschemes/SCTE35Parser_iOS.xcscheme | 67 + .../xcschemes/SCTE35Parser_macOS.xcscheme | 68 + .../xcschemes/SCTE35Parser_tvOS.xcscheme | 67 + 9 files changed, 1663 insertions(+) create mode 100644 SCTE35Parser.xcodeproj/SCTE35ParserTests_Info.plist create mode 100644 SCTE35Parser.xcodeproj/SCTE35Parser_Info.plist create mode 100644 SCTE35Parser.xcodeproj/project.pbxproj create mode 100644 SCTE35Parser.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 SCTE35Parser.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 SCTE35Parser.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 SCTE35Parser.xcodeproj/xcshareddata/xcschemes/SCTE35Parser_iOS.xcscheme create mode 100644 SCTE35Parser.xcodeproj/xcshareddata/xcschemes/SCTE35Parser_macOS.xcscheme create mode 100644 SCTE35Parser.xcodeproj/xcshareddata/xcschemes/SCTE35Parser_tvOS.xcscheme diff --git a/SCTE35Parser.xcodeproj/SCTE35ParserTests_Info.plist b/SCTE35Parser.xcodeproj/SCTE35ParserTests_Info.plist new file mode 100644 index 0000000..7c23420 --- /dev/null +++ b/SCTE35Parser.xcodeproj/SCTE35ParserTests_Info.plist @@ -0,0 +1,25 @@ + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/SCTE35Parser.xcodeproj/SCTE35Parser_Info.plist b/SCTE35Parser.xcodeproj/SCTE35Parser_Info.plist new file mode 100644 index 0000000..ca23c84 --- /dev/null +++ b/SCTE35Parser.xcodeproj/SCTE35Parser_Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/SCTE35Parser.xcodeproj/project.pbxproj b/SCTE35Parser.xcodeproj/project.pbxproj new file mode 100644 index 0000000..9d96ab1 --- /dev/null +++ b/SCTE35Parser.xcodeproj/project.pbxproj @@ -0,0 +1,1387 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXAggregateTarget section */ + "SCTE35Parser::SCTE35ParserPackageTests::ProductTarget" /* SCTE35ParserPackageTests */ = { + isa = PBXAggregateTarget; + buildConfigurationList = OBJ_135 /* Build configuration list for PBXAggregateTarget "SCTE35ParserPackageTests" */; + buildPhases = ( + ); + dependencies = ( + OBJ_138 /* PBXTargetDependency */, + ); + name = SCTE35ParserPackageTests; + productName = SCTE35ParserPackageTests; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + E801367826502C3100EA6FBF /* Data+hexString.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_26 /* Data+hexString.swift */; }; + E801367926502C3100EA6FBF /* SpliceInfoSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_57 /* SpliceInfoSection.swift */; }; + E801367A26502C3200EA6FBF /* Data+hexString.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_26 /* Data+hexString.swift */; }; + E801367B26502C3200EA6FBF /* SpliceInfoSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_57 /* SpliceInfoSection.swift */; }; + E801367C26502C3900EA6FBF /* BitStreamMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_12 /* BitStreamMode.swift */; }; + E801367D26502C3900EA6FBF /* ATSCContentIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_10 /* ATSCContentIdentifier.swift */; }; + E801367E26502C3900EA6FBF /* AudioCodingMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_11 /* AudioCodingMode.swift */; }; + E801367F26502C3900EA6FBF /* BitStreamMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_12 /* BitStreamMode.swift */; }; + E801368026502C3900EA6FBF /* ATSCContentIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_10 /* ATSCContentIdentifier.swift */; }; + E801368126502C3900EA6FBF /* AudioCodingMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_11 /* AudioCodingMode.swift */; }; + E801368226502C4500EA6FBF /* InvalidBitStreamModeErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_29 /* InvalidBitStreamModeErrorInfo.swift */; }; + E801368326502C4500EA6FBF /* InvalidMPUInSegmentationUPIDInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_30 /* InvalidMPUInSegmentationUPIDInfo.swift */; }; + E801368426502C4500EA6FBF /* UnexpectedSegmentationUPIDLengthErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_36 /* UnexpectedSegmentationUPIDLengthErrorInfo.swift */; }; + E801368526502C4500EA6FBF /* SpliceDescriptorTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_55 /* SpliceDescriptorTag.swift */; }; + E801368626502C4500EA6FBF /* SegmentationDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_53 /* SegmentationDescriptor.swift */; }; + E801368726502C4500EA6FBF /* SpliceSchedule.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_44 /* SpliceSchedule.swift */; }; + E801368826502C4500EA6FBF /* SegmentationDescriptor+SegmentationTypeID.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_50 /* SegmentationDescriptor+SegmentationTypeID.swift */; }; + E801368926502C4500EA6FBF /* SpliceInsert.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_43 /* SpliceInsert.swift */; }; + E801368A26502C4500EA6FBF /* AvailDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_48 /* AvailDescriptor.swift */; }; + E801368B26502C4500EA6FBF /* InvalidATSCContentIdentifierInUPIDInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_28 /* InvalidATSCContentIdentifierInUPIDInfo.swift */; }; + E801368C26502C4500EA6FBF /* DataBitReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_24 /* DataBitReader.swift */; }; + E801368D26502C4500EA6FBF /* SCTE35ParserError.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_33 /* SCTE35ParserError.swift */; }; + E801368E26502C4500EA6FBF /* SpliceCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_41 /* SpliceCommand.swift */; }; + E801368F26502C4500EA6FBF /* DTMFDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_49 /* DTMFDescriptor.swift */; }; + E801369026502C4500EA6FBF /* SpliceTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_60 /* SpliceTime.swift */; }; + E801369126502C4500EA6FBF /* TimeDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_56 /* TimeDescriptor.swift */; }; + E801369226502C4500EA6FBF /* AudioDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_47 /* AudioDescriptor.swift */; }; + E801369326502C4500EA6FBF /* UnexpectedEndOfDataErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_35 /* UnexpectedEndOfDataErrorInfo.swift */; }; + E801369426502C4500EA6FBF /* ParserError+Code.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_31 /* ParserError+Code.swift */; }; + E801369526502C4500EA6FBF /* TimeSignal.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_45 /* TimeSignal.swift */; }; + E801369626502C4500EA6FBF /* SpliceCommandType.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_42 /* SpliceCommandType.swift */; }; + E801369726502C4600EA6FBF /* DataReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_25 /* DataReader.swift */; }; + E801369826502C4600EA6FBF /* BreakDuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_59 /* BreakDuration.swift */; }; + E801369926502C4600EA6FBF /* UnexpectedSpliceCommandLengthErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_37 /* UnexpectedSpliceCommandLengthErrorInfo.swift */; }; + E801369A26502C4600EA6FBF /* SpliceDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_54 /* SpliceDescriptor.swift */; }; + E801369B26502C4600EA6FBF /* ParserError.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_32 /* ParserError.swift */; }; + E801369C26502C4600EA6FBF /* PrivateCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_40 /* PrivateCommand.swift */; }; + E801369D26502C4600EA6FBF /* UnexpectedDescriptorLoopLengthErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_34 /* UnexpectedDescriptorLoopLengthErrorInfo.swift */; }; + E801369E26502C4600EA6FBF /* SegmentationDescriptor+SegmentationUPID.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_51 /* SegmentationDescriptor+SegmentationUPID.swift */; }; + E801369F26502C4600EA6FBF /* UnexpectedSpliceDescriptorLengthErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_38 /* UnexpectedSpliceDescriptorLengthErrorInfo.swift */; }; + E80136A026502C4600EA6FBF /* SegmentationDescriptor+SegmentationUPIDType.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_52 /* SegmentationDescriptor+SegmentationUPIDType.swift */; }; + E80136A126502C4600EA6FBF /* InvalidBitStreamModeErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_29 /* InvalidBitStreamModeErrorInfo.swift */; }; + E80136A226502C4600EA6FBF /* InvalidMPUInSegmentationUPIDInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_30 /* InvalidMPUInSegmentationUPIDInfo.swift */; }; + E80136A326502C4600EA6FBF /* UnexpectedSegmentationUPIDLengthErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_36 /* UnexpectedSegmentationUPIDLengthErrorInfo.swift */; }; + E80136A426502C4600EA6FBF /* SpliceDescriptorTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_55 /* SpliceDescriptorTag.swift */; }; + E80136A526502C4600EA6FBF /* SegmentationDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_53 /* SegmentationDescriptor.swift */; }; + E80136A626502C4600EA6FBF /* SpliceSchedule.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_44 /* SpliceSchedule.swift */; }; + E80136A726502C4600EA6FBF /* SegmentationDescriptor+SegmentationTypeID.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_50 /* SegmentationDescriptor+SegmentationTypeID.swift */; }; + E80136A826502C4600EA6FBF /* SpliceInsert.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_43 /* SpliceInsert.swift */; }; + E80136A926502C4600EA6FBF /* AvailDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_48 /* AvailDescriptor.swift */; }; + E80136AA26502C4600EA6FBF /* InvalidATSCContentIdentifierInUPIDInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_28 /* InvalidATSCContentIdentifierInUPIDInfo.swift */; }; + E80136AB26502C4600EA6FBF /* DataBitReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_24 /* DataBitReader.swift */; }; + E80136AC26502C4600EA6FBF /* SCTE35ParserError.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_33 /* SCTE35ParserError.swift */; }; + E80136AD26502C4600EA6FBF /* SpliceCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_41 /* SpliceCommand.swift */; }; + E80136AE26502C4600EA6FBF /* DTMFDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_49 /* DTMFDescriptor.swift */; }; + E80136AF26502C4600EA6FBF /* SpliceTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_60 /* SpliceTime.swift */; }; + E80136B026502C4700EA6FBF /* TimeDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_56 /* TimeDescriptor.swift */; }; + E80136B126502C4700EA6FBF /* AudioDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_47 /* AudioDescriptor.swift */; }; + E80136B226502C4700EA6FBF /* UnexpectedEndOfDataErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_35 /* UnexpectedEndOfDataErrorInfo.swift */; }; + E80136B326502C4700EA6FBF /* ParserError+Code.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_31 /* ParserError+Code.swift */; }; + E80136B426502C4700EA6FBF /* TimeSignal.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_45 /* TimeSignal.swift */; }; + E80136B526502C4700EA6FBF /* SpliceCommandType.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_42 /* SpliceCommandType.swift */; }; + E80136B626502C4700EA6FBF /* DataReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_25 /* DataReader.swift */; }; + E80136B726502C4700EA6FBF /* BreakDuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_59 /* BreakDuration.swift */; }; + E80136B826502C4700EA6FBF /* UnexpectedSpliceCommandLengthErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_37 /* UnexpectedSpliceCommandLengthErrorInfo.swift */; }; + E80136B926502C4700EA6FBF /* SpliceDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_54 /* SpliceDescriptor.swift */; }; + E80136BA26502C4700EA6FBF /* ParserError.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_32 /* ParserError.swift */; }; + E80136BB26502C4700EA6FBF /* PrivateCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_40 /* PrivateCommand.swift */; }; + E80136BC26502C4700EA6FBF /* UnexpectedDescriptorLoopLengthErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_34 /* UnexpectedDescriptorLoopLengthErrorInfo.swift */; }; + E80136BD26502C4700EA6FBF /* SegmentationDescriptor+SegmentationUPID.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_51 /* SegmentationDescriptor+SegmentationUPID.swift */; }; + E80136BE26502C4700EA6FBF /* UnexpectedSpliceDescriptorLengthErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_38 /* UnexpectedSpliceDescriptorLengthErrorInfo.swift */; }; + E80136BF26502C4700EA6FBF /* SegmentationDescriptor+SegmentationUPIDType.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_52 /* SegmentationDescriptor+SegmentationUPIDType.swift */; }; + E80136C026502C5500EA6FBF /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_19 /* Extensions.swift */; }; + E80136C126502C5500EA6FBF /* LsbBitReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_20 /* LsbBitReader.swift */; }; + E80136C226502C5500EA6FBF /* LsbBitWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_21 /* LsbBitWriter.swift */; }; + E80136C326502C5500EA6FBF /* MsbBitReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_22 /* MsbBitReader.swift */; }; + E80136C426502C5500EA6FBF /* MsbBitWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_23 /* MsbBitWriter.swift */; }; + E80136C526502C5500EA6FBF /* BitWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_17 /* BitWriter.swift */; }; + E80136C626502C5500EA6FBF /* BitReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_16 /* BitReader.swift */; }; + E80136C726502C5500EA6FBF /* ByteReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_18 /* ByteReader.swift */; }; + E80136C826502C5600EA6FBF /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_19 /* Extensions.swift */; }; + E80136C926502C5600EA6FBF /* LsbBitReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_20 /* LsbBitReader.swift */; }; + E80136CA26502C5600EA6FBF /* LsbBitWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_21 /* LsbBitWriter.swift */; }; + E80136CB26502C5600EA6FBF /* MsbBitReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_22 /* MsbBitReader.swift */; }; + E80136CC26502C5600EA6FBF /* MsbBitWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_23 /* MsbBitWriter.swift */; }; + E80136CD26502C5600EA6FBF /* BitWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_17 /* BitWriter.swift */; }; + E80136CE26502C5600EA6FBF /* BitReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_16 /* BitReader.swift */; }; + E80136CF26502C5600EA6FBF /* ByteReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_18 /* ByteReader.swift */; }; + OBJ_100 /* ParserError+Code.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_31 /* ParserError+Code.swift */; }; + OBJ_101 /* ParserError.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_32 /* ParserError.swift */; }; + OBJ_102 /* SCTE35ParserError.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_33 /* SCTE35ParserError.swift */; }; + OBJ_103 /* UnexpectedDescriptorLoopLengthErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_34 /* UnexpectedDescriptorLoopLengthErrorInfo.swift */; }; + OBJ_104 /* UnexpectedEndOfDataErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_35 /* UnexpectedEndOfDataErrorInfo.swift */; }; + OBJ_105 /* UnexpectedSegmentationUPIDLengthErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_36 /* UnexpectedSegmentationUPIDLengthErrorInfo.swift */; }; + OBJ_106 /* UnexpectedSpliceCommandLengthErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_37 /* UnexpectedSpliceCommandLengthErrorInfo.swift */; }; + OBJ_107 /* UnexpectedSpliceDescriptorLengthErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_38 /* UnexpectedSpliceDescriptorLengthErrorInfo.swift */; }; + OBJ_108 /* PrivateCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_40 /* PrivateCommand.swift */; }; + OBJ_109 /* SpliceCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_41 /* SpliceCommand.swift */; }; + OBJ_110 /* SpliceCommandType.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_42 /* SpliceCommandType.swift */; }; + OBJ_111 /* SpliceInsert.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_43 /* SpliceInsert.swift */; }; + OBJ_112 /* SpliceSchedule.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_44 /* SpliceSchedule.swift */; }; + OBJ_113 /* TimeSignal.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_45 /* TimeSignal.swift */; }; + OBJ_114 /* AudioDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_47 /* AudioDescriptor.swift */; }; + OBJ_115 /* AvailDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_48 /* AvailDescriptor.swift */; }; + OBJ_116 /* DTMFDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_49 /* DTMFDescriptor.swift */; }; + OBJ_117 /* SegmentationDescriptor+SegmentationTypeID.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_50 /* SegmentationDescriptor+SegmentationTypeID.swift */; }; + OBJ_118 /* SegmentationDescriptor+SegmentationUPID.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_51 /* SegmentationDescriptor+SegmentationUPID.swift */; }; + OBJ_119 /* SegmentationDescriptor+SegmentationUPIDType.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_52 /* SegmentationDescriptor+SegmentationUPIDType.swift */; }; + OBJ_120 /* SegmentationDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_53 /* SegmentationDescriptor.swift */; }; + OBJ_121 /* SpliceDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_54 /* SpliceDescriptor.swift */; }; + OBJ_122 /* SpliceDescriptorTag.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_55 /* SpliceDescriptorTag.swift */; }; + OBJ_123 /* TimeDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_56 /* TimeDescriptor.swift */; }; + OBJ_124 /* SpliceInfoSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_57 /* SpliceInfoSection.swift */; }; + OBJ_125 /* BreakDuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_59 /* BreakDuration.swift */; }; + OBJ_126 /* SpliceTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_60 /* SpliceTime.swift */; }; + OBJ_133 /* Package.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_6 /* Package.swift */; }; + OBJ_144 /* ParserErrorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_64 /* ParserErrorTests.swift */; }; + OBJ_145 /* MockDataBitReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_66 /* MockDataBitReader.swift */; }; + OBJ_146 /* SCTE35ParserTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_67 /* SCTE35ParserTests.swift */; }; + OBJ_147 /* UnexpectedEndOfDataErrorInfo+stub.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_69 /* UnexpectedEndOfDataErrorInfo+stub.swift */; }; + OBJ_148 /* BreakDurationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_71 /* BreakDurationTests.swift */; }; + OBJ_149 /* SpliceTimeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_72 /* SpliceTimeTests.swift */; }; + OBJ_151 /* SCTE35Parser.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = "SCTE35Parser::SCTE35Parser::Product" /* SCTE35Parser.framework */; }; + OBJ_83 /* ATSCContentIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_10 /* ATSCContentIdentifier.swift */; }; + OBJ_84 /* AudioCodingMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_11 /* AudioCodingMode.swift */; }; + OBJ_85 /* BitStreamMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_12 /* BitStreamMode.swift */; }; + OBJ_86 /* BitReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_16 /* BitReader.swift */; }; + OBJ_87 /* BitWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_17 /* BitWriter.swift */; }; + OBJ_88 /* ByteReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_18 /* ByteReader.swift */; }; + OBJ_89 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_19 /* Extensions.swift */; }; + OBJ_90 /* LsbBitReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_20 /* LsbBitReader.swift */; }; + OBJ_91 /* LsbBitWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_21 /* LsbBitWriter.swift */; }; + OBJ_92 /* MsbBitReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_22 /* MsbBitReader.swift */; }; + OBJ_93 /* MsbBitWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_23 /* MsbBitWriter.swift */; }; + OBJ_94 /* DataBitReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_24 /* DataBitReader.swift */; }; + OBJ_95 /* DataReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_25 /* DataReader.swift */; }; + OBJ_96 /* Data+hexString.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_26 /* Data+hexString.swift */; }; + OBJ_97 /* InvalidATSCContentIdentifierInUPIDInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_28 /* InvalidATSCContentIdentifierInUPIDInfo.swift */; }; + OBJ_98 /* InvalidBitStreamModeErrorInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_29 /* InvalidBitStreamModeErrorInfo.swift */; }; + OBJ_99 /* InvalidMPUInSegmentationUPIDInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_30 /* InvalidMPUInSegmentationUPIDInfo.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + E801365C265026FA00EA6FBF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = OBJ_1 /* Project object */; + proxyType = 1; + remoteGlobalIDString = "SCTE35Parser::SCTE35Parser"; + remoteInfo = SCTE35Parser; + }; + E801366A2650282100EA6FBF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = OBJ_1 /* Project object */; + proxyType = 1; + remoteGlobalIDString = "SCTE35Parser::SCTE35ParserTests"; + remoteInfo = SCTE35ParserTests; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + E80136622650282100EA6FBF /* SCTE35Parser.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SCTE35Parser.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E801367026502B6800EA6FBF /* SCTE35Parser.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SCTE35Parser.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + OBJ_10 /* ATSCContentIdentifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ATSCContentIdentifier.swift; sourceTree = ""; }; + OBJ_11 /* AudioCodingMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioCodingMode.swift; sourceTree = ""; }; + OBJ_12 /* BitStreamMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BitStreamMode.swift; sourceTree = ""; }; + OBJ_16 /* BitReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BitReader.swift; sourceTree = ""; }; + OBJ_17 /* BitWriter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BitWriter.swift; sourceTree = ""; }; + OBJ_18 /* ByteReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ByteReader.swift; sourceTree = ""; }; + OBJ_19 /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; + OBJ_20 /* LsbBitReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LsbBitReader.swift; sourceTree = ""; }; + OBJ_21 /* LsbBitWriter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LsbBitWriter.swift; sourceTree = ""; }; + OBJ_22 /* MsbBitReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MsbBitReader.swift; sourceTree = ""; }; + OBJ_23 /* MsbBitWriter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MsbBitWriter.swift; sourceTree = ""; }; + OBJ_24 /* DataBitReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataBitReader.swift; sourceTree = ""; }; + OBJ_25 /* DataReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataReader.swift; sourceTree = ""; }; + OBJ_26 /* Data+hexString.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Data+hexString.swift"; sourceTree = ""; }; + OBJ_28 /* InvalidATSCContentIdentifierInUPIDInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvalidATSCContentIdentifierInUPIDInfo.swift; sourceTree = ""; }; + OBJ_29 /* InvalidBitStreamModeErrorInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvalidBitStreamModeErrorInfo.swift; sourceTree = ""; }; + OBJ_30 /* InvalidMPUInSegmentationUPIDInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvalidMPUInSegmentationUPIDInfo.swift; sourceTree = ""; }; + OBJ_31 /* ParserError+Code.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ParserError+Code.swift"; sourceTree = ""; }; + OBJ_32 /* ParserError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParserError.swift; sourceTree = ""; }; + OBJ_33 /* SCTE35ParserError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SCTE35ParserError.swift; sourceTree = ""; }; + OBJ_34 /* UnexpectedDescriptorLoopLengthErrorInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnexpectedDescriptorLoopLengthErrorInfo.swift; sourceTree = ""; }; + OBJ_35 /* UnexpectedEndOfDataErrorInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnexpectedEndOfDataErrorInfo.swift; sourceTree = ""; }; + OBJ_36 /* UnexpectedSegmentationUPIDLengthErrorInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnexpectedSegmentationUPIDLengthErrorInfo.swift; sourceTree = ""; }; + OBJ_37 /* UnexpectedSpliceCommandLengthErrorInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnexpectedSpliceCommandLengthErrorInfo.swift; sourceTree = ""; }; + OBJ_38 /* UnexpectedSpliceDescriptorLengthErrorInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnexpectedSpliceDescriptorLengthErrorInfo.swift; sourceTree = ""; }; + OBJ_40 /* PrivateCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivateCommand.swift; sourceTree = ""; }; + OBJ_41 /* SpliceCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpliceCommand.swift; sourceTree = ""; }; + OBJ_42 /* SpliceCommandType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpliceCommandType.swift; sourceTree = ""; }; + OBJ_43 /* SpliceInsert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpliceInsert.swift; sourceTree = ""; }; + OBJ_44 /* SpliceSchedule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpliceSchedule.swift; sourceTree = ""; }; + OBJ_45 /* TimeSignal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeSignal.swift; sourceTree = ""; }; + OBJ_47 /* AudioDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioDescriptor.swift; sourceTree = ""; }; + OBJ_48 /* AvailDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvailDescriptor.swift; sourceTree = ""; }; + OBJ_49 /* DTMFDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DTMFDescriptor.swift; sourceTree = ""; }; + OBJ_50 /* SegmentationDescriptor+SegmentationTypeID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SegmentationDescriptor+SegmentationTypeID.swift"; sourceTree = ""; }; + OBJ_51 /* SegmentationDescriptor+SegmentationUPID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SegmentationDescriptor+SegmentationUPID.swift"; sourceTree = ""; }; + OBJ_52 /* SegmentationDescriptor+SegmentationUPIDType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SegmentationDescriptor+SegmentationUPIDType.swift"; sourceTree = ""; }; + OBJ_53 /* SegmentationDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SegmentationDescriptor.swift; sourceTree = ""; }; + OBJ_54 /* SpliceDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpliceDescriptor.swift; sourceTree = ""; }; + OBJ_55 /* SpliceDescriptorTag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpliceDescriptorTag.swift; sourceTree = ""; }; + OBJ_56 /* TimeDescriptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeDescriptor.swift; sourceTree = ""; }; + OBJ_57 /* SpliceInfoSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpliceInfoSection.swift; sourceTree = ""; }; + OBJ_59 /* BreakDuration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BreakDuration.swift; sourceTree = ""; }; + OBJ_6 /* Package.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; path = Package.swift; sourceTree = ""; }; + OBJ_60 /* SpliceTime.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpliceTime.swift; sourceTree = ""; }; + OBJ_64 /* ParserErrorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParserErrorTests.swift; sourceTree = ""; }; + OBJ_66 /* MockDataBitReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockDataBitReader.swift; sourceTree = ""; }; + OBJ_67 /* SCTE35ParserTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SCTE35ParserTests.swift; sourceTree = ""; }; + OBJ_69 /* UnexpectedEndOfDataErrorInfo+stub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UnexpectedEndOfDataErrorInfo+stub.swift"; sourceTree = ""; }; + OBJ_71 /* BreakDurationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BreakDurationTests.swift; sourceTree = ""; }; + OBJ_72 /* SpliceTimeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpliceTimeTests.swift; sourceTree = ""; }; + OBJ_76 /* Specification */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Specification; sourceTree = SOURCE_ROOT; }; + OBJ_77 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + "SCTE35Parser::SCTE35Parser::Product" /* SCTE35Parser.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SCTE35Parser.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + "SCTE35Parser::SCTE35ParserTests::Product" /* SCTE35ParserTests.xctest */ = {isa = PBXFileReference; lastKnownFileType = file; path = SCTE35ParserTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + E801365F2650282100EA6FBF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E801366D26502B6800EA6FBF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + OBJ_127 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + OBJ_150 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 0; + files = ( + OBJ_151 /* SCTE35Parser.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + OBJ_13 /* BitParser */ = { + isa = PBXGroup; + children = ( + OBJ_24 /* DataBitReader.swift */, + OBJ_25 /* DataReader.swift */, + OBJ_14 /* BitByteData */, + ); + path = BitParser; + sourceTree = ""; + }; + OBJ_14 /* BitByteData */ = { + isa = PBXGroup; + children = ( + OBJ_15 /* Sources */, + ); + path = BitByteData; + sourceTree = ""; + }; + OBJ_15 /* Sources */ = { + isa = PBXGroup; + children = ( + OBJ_16 /* BitReader.swift */, + OBJ_17 /* BitWriter.swift */, + OBJ_18 /* ByteReader.swift */, + OBJ_19 /* Extensions.swift */, + OBJ_20 /* LsbBitReader.swift */, + OBJ_21 /* LsbBitWriter.swift */, + OBJ_22 /* MsbBitReader.swift */, + OBJ_23 /* MsbBitWriter.swift */, + ); + path = Sources; + sourceTree = ""; + }; + OBJ_27 /* Errors */ = { + isa = PBXGroup; + children = ( + OBJ_28 /* InvalidATSCContentIdentifierInUPIDInfo.swift */, + OBJ_29 /* InvalidBitStreamModeErrorInfo.swift */, + OBJ_30 /* InvalidMPUInSegmentationUPIDInfo.swift */, + OBJ_31 /* ParserError+Code.swift */, + OBJ_32 /* ParserError.swift */, + OBJ_33 /* SCTE35ParserError.swift */, + OBJ_34 /* UnexpectedDescriptorLoopLengthErrorInfo.swift */, + OBJ_35 /* UnexpectedEndOfDataErrorInfo.swift */, + OBJ_36 /* UnexpectedSegmentationUPIDLengthErrorInfo.swift */, + OBJ_37 /* UnexpectedSpliceCommandLengthErrorInfo.swift */, + OBJ_38 /* UnexpectedSpliceDescriptorLengthErrorInfo.swift */, + ); + path = Errors; + sourceTree = ""; + }; + OBJ_39 /* SpliceCommands */ = { + isa = PBXGroup; + children = ( + OBJ_40 /* PrivateCommand.swift */, + OBJ_41 /* SpliceCommand.swift */, + OBJ_42 /* SpliceCommandType.swift */, + OBJ_43 /* SpliceInsert.swift */, + OBJ_44 /* SpliceSchedule.swift */, + OBJ_45 /* TimeSignal.swift */, + ); + path = SpliceCommands; + sourceTree = ""; + }; + OBJ_46 /* SpliceDescriptors */ = { + isa = PBXGroup; + children = ( + OBJ_47 /* AudioDescriptor.swift */, + OBJ_48 /* AvailDescriptor.swift */, + OBJ_49 /* DTMFDescriptor.swift */, + OBJ_50 /* SegmentationDescriptor+SegmentationTypeID.swift */, + OBJ_51 /* SegmentationDescriptor+SegmentationUPID.swift */, + OBJ_52 /* SegmentationDescriptor+SegmentationUPIDType.swift */, + OBJ_53 /* SegmentationDescriptor.swift */, + OBJ_54 /* SpliceDescriptor.swift */, + OBJ_55 /* SpliceDescriptorTag.swift */, + OBJ_56 /* TimeDescriptor.swift */, + ); + path = SpliceDescriptors; + sourceTree = ""; + }; + OBJ_5 /* */ = { + isa = PBXGroup; + children = ( + OBJ_6 /* Package.swift */, + OBJ_7 /* Sources */, + OBJ_61 /* Tests */, + OBJ_73 /* Products */, + OBJ_76 /* Specification */, + OBJ_77 /* README.md */, + ); + name = ""; + sourceTree = ""; + }; + OBJ_58 /* Time */ = { + isa = PBXGroup; + children = ( + OBJ_59 /* BreakDuration.swift */, + OBJ_60 /* SpliceTime.swift */, + ); + path = Time; + sourceTree = ""; + }; + OBJ_61 /* Tests */ = { + isa = PBXGroup; + children = ( + OBJ_62 /* SCTE35ParserTests */, + ); + name = Tests; + sourceTree = SOURCE_ROOT; + }; + OBJ_62 /* SCTE35ParserTests */ = { + isa = PBXGroup; + children = ( + OBJ_67 /* SCTE35ParserTests.swift */, + OBJ_63 /* Errors */, + OBJ_65 /* Mocks */, + OBJ_68 /* Stubs */, + OBJ_70 /* Time */, + ); + name = SCTE35ParserTests; + path = Tests/SCTE35ParserTests; + sourceTree = SOURCE_ROOT; + }; + OBJ_63 /* Errors */ = { + isa = PBXGroup; + children = ( + OBJ_64 /* ParserErrorTests.swift */, + ); + path = Errors; + sourceTree = ""; + }; + OBJ_65 /* Mocks */ = { + isa = PBXGroup; + children = ( + OBJ_66 /* MockDataBitReader.swift */, + ); + path = Mocks; + sourceTree = ""; + }; + OBJ_68 /* Stubs */ = { + isa = PBXGroup; + children = ( + OBJ_69 /* UnexpectedEndOfDataErrorInfo+stub.swift */, + ); + path = Stubs; + sourceTree = ""; + }; + OBJ_7 /* Sources */ = { + isa = PBXGroup; + children = ( + OBJ_8 /* SCTE35Parser */, + ); + name = Sources; + sourceTree = SOURCE_ROOT; + }; + OBJ_70 /* Time */ = { + isa = PBXGroup; + children = ( + OBJ_71 /* BreakDurationTests.swift */, + OBJ_72 /* SpliceTimeTests.swift */, + ); + path = Time; + sourceTree = ""; + }; + OBJ_73 /* Products */ = { + isa = PBXGroup; + children = ( + "SCTE35Parser::SCTE35Parser::Product" /* SCTE35Parser.framework */, + "SCTE35Parser::SCTE35ParserTests::Product" /* SCTE35ParserTests.xctest */, + E80136622650282100EA6FBF /* SCTE35Parser.framework */, + E801367026502B6800EA6FBF /* SCTE35Parser.framework */, + ); + name = Products; + sourceTree = BUILT_PRODUCTS_DIR; + }; + OBJ_8 /* SCTE35Parser */ = { + isa = PBXGroup; + children = ( + OBJ_26 /* Data+hexString.swift */, + OBJ_57 /* SpliceInfoSection.swift */, + OBJ_9 /* ATSC */, + OBJ_13 /* BitParser */, + OBJ_27 /* Errors */, + OBJ_39 /* SpliceCommands */, + OBJ_46 /* SpliceDescriptors */, + OBJ_58 /* Time */, + ); + name = SCTE35Parser; + path = Sources/SCTE35Parser; + sourceTree = SOURCE_ROOT; + }; + OBJ_9 /* ATSC */ = { + isa = PBXGroup; + children = ( + OBJ_10 /* ATSCContentIdentifier.swift */, + OBJ_11 /* AudioCodingMode.swift */, + OBJ_12 /* BitStreamMode.swift */, + ); + path = ATSC; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + E801365D2650282100EA6FBF /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E801366B26502B6800EA6FBF /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + E80136612650282100EA6FBF /* SCTE35Parser_iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = E80136672650282100EA6FBF /* Build configuration list for PBXNativeTarget "SCTE35Parser_iOS" */; + buildPhases = ( + E801365D2650282100EA6FBF /* Headers */, + E801365E2650282100EA6FBF /* Sources */, + E801365F2650282100EA6FBF /* Frameworks */, + E80136602650282100EA6FBF /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SCTE35Parser_iOS; + productName = SCTE35Parser; + productReference = E80136622650282100EA6FBF /* SCTE35Parser.framework */; + productType = "com.apple.product-type.framework"; + }; + E801366F26502B6800EA6FBF /* SCTE35Parser_tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = E801367526502B6800EA6FBF /* Build configuration list for PBXNativeTarget "SCTE35Parser_tvOS" */; + buildPhases = ( + E801366B26502B6800EA6FBF /* Headers */, + E801366C26502B6800EA6FBF /* Sources */, + E801366D26502B6800EA6FBF /* Frameworks */, + E801366E26502B6800EA6FBF /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SCTE35Parser_tvOS; + productName = SCTE35Parser; + productReference = E801367026502B6800EA6FBF /* SCTE35Parser.framework */; + productType = "com.apple.product-type.framework"; + }; + "SCTE35Parser::SCTE35Parser" /* SCTE35Parser_macOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = OBJ_79 /* Build configuration list for PBXNativeTarget "SCTE35Parser_macOS" */; + buildPhases = ( + OBJ_82 /* Sources */, + OBJ_127 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SCTE35Parser_macOS; + productName = SCTE35Parser; + productReference = "SCTE35Parser::SCTE35Parser::Product" /* SCTE35Parser.framework */; + productType = "com.apple.product-type.framework"; + }; + "SCTE35Parser::SCTE35ParserTests" /* SCTE35ParserTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = OBJ_140 /* Build configuration list for PBXNativeTarget "SCTE35ParserTests" */; + buildPhases = ( + OBJ_143 /* Sources */, + OBJ_150 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + OBJ_152 /* PBXTargetDependency */, + ); + name = SCTE35ParserTests; + productName = SCTE35ParserTests; + productReference = "SCTE35Parser::SCTE35ParserTests::Product" /* SCTE35ParserTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + "SCTE35Parser::SwiftPMPackageDescription" /* SCTE35ParserPackageDescription */ = { + isa = PBXNativeTarget; + buildConfigurationList = OBJ_129 /* Build configuration list for PBXNativeTarget "SCTE35ParserPackageDescription" */; + buildPhases = ( + OBJ_132 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SCTE35ParserPackageDescription; + productName = SCTE35ParserPackageDescription; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + OBJ_1 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftMigration = 9999; + LastUpgradeCheck = 9999; + TargetAttributes = { + E80136612650282100EA6FBF = { + CreatedOnToolsVersion = 12.5; + ProvisioningStyle = Automatic; + }; + E801366F26502B6800EA6FBF = { + CreatedOnToolsVersion = 12.5; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = OBJ_2 /* Build configuration list for PBXProject "SCTE35Parser" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = OBJ_5 /* */; + productRefGroup = OBJ_73 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + E80136612650282100EA6FBF /* SCTE35Parser_iOS */, + "SCTE35Parser::SCTE35Parser" /* SCTE35Parser_macOS */, + E801366F26502B6800EA6FBF /* SCTE35Parser_tvOS */, + "SCTE35Parser::SwiftPMPackageDescription" /* SCTE35ParserPackageDescription */, + "SCTE35Parser::SCTE35ParserPackageTests::ProductTarget" /* SCTE35ParserPackageTests */, + "SCTE35Parser::SCTE35ParserTests" /* SCTE35ParserTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + E80136602650282100EA6FBF /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E801366E26502B6800EA6FBF /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + E801365E2650282100EA6FBF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E801369D26502C4600EA6FBF /* UnexpectedDescriptorLoopLengthErrorInfo.swift in Sources */, + E80136C326502C5500EA6FBF /* MsbBitReader.swift in Sources */, + E801367826502C3100EA6FBF /* Data+hexString.swift in Sources */, + E801368B26502C4500EA6FBF /* InvalidATSCContentIdentifierInUPIDInfo.swift in Sources */, + E801369B26502C4600EA6FBF /* ParserError.swift in Sources */, + E801369926502C4600EA6FBF /* UnexpectedSpliceCommandLengthErrorInfo.swift in Sources */, + E801369026502C4500EA6FBF /* SpliceTime.swift in Sources */, + E80136A026502C4600EA6FBF /* SegmentationDescriptor+SegmentationUPIDType.swift in Sources */, + E801369226502C4500EA6FBF /* AudioDescriptor.swift in Sources */, + E801368526502C4500EA6FBF /* SpliceDescriptorTag.swift in Sources */, + E80136C726502C5500EA6FBF /* ByteReader.swift in Sources */, + E801369826502C4600EA6FBF /* BreakDuration.swift in Sources */, + E801367C26502C3900EA6FBF /* BitStreamMode.swift in Sources */, + E801369C26502C4600EA6FBF /* PrivateCommand.swift in Sources */, + E801367926502C3100EA6FBF /* SpliceInfoSection.swift in Sources */, + E801368226502C4500EA6FBF /* InvalidBitStreamModeErrorInfo.swift in Sources */, + E80136C026502C5500EA6FBF /* Extensions.swift in Sources */, + E80136C426502C5500EA6FBF /* MsbBitWriter.swift in Sources */, + E801368926502C4500EA6FBF /* SpliceInsert.swift in Sources */, + E801369526502C4500EA6FBF /* TimeSignal.swift in Sources */, + E801368A26502C4500EA6FBF /* AvailDescriptor.swift in Sources */, + E801369626502C4500EA6FBF /* SpliceCommandType.swift in Sources */, + E801367E26502C3900EA6FBF /* AudioCodingMode.swift in Sources */, + E80136C226502C5500EA6FBF /* LsbBitWriter.swift in Sources */, + E801367D26502C3900EA6FBF /* ATSCContentIdentifier.swift in Sources */, + E801368F26502C4500EA6FBF /* DTMFDescriptor.swift in Sources */, + E801368C26502C4500EA6FBF /* DataBitReader.swift in Sources */, + E801369A26502C4600EA6FBF /* SpliceDescriptor.swift in Sources */, + E801369426502C4500EA6FBF /* ParserError+Code.swift in Sources */, + E801368326502C4500EA6FBF /* InvalidMPUInSegmentationUPIDInfo.swift in Sources */, + E801368726502C4500EA6FBF /* SpliceSchedule.swift in Sources */, + E80136C526502C5500EA6FBF /* BitWriter.swift in Sources */, + E801368626502C4500EA6FBF /* SegmentationDescriptor.swift in Sources */, + E801369126502C4500EA6FBF /* TimeDescriptor.swift in Sources */, + E801368426502C4500EA6FBF /* UnexpectedSegmentationUPIDLengthErrorInfo.swift in Sources */, + E80136C126502C5500EA6FBF /* LsbBitReader.swift in Sources */, + E801369E26502C4600EA6FBF /* SegmentationDescriptor+SegmentationUPID.swift in Sources */, + E801368D26502C4500EA6FBF /* SCTE35ParserError.swift in Sources */, + E801368826502C4500EA6FBF /* SegmentationDescriptor+SegmentationTypeID.swift in Sources */, + E80136C626502C5500EA6FBF /* BitReader.swift in Sources */, + E801368E26502C4500EA6FBF /* SpliceCommand.swift in Sources */, + E801369726502C4600EA6FBF /* DataReader.swift in Sources */, + E801369F26502C4600EA6FBF /* UnexpectedSpliceDescriptorLengthErrorInfo.swift in Sources */, + E801369326502C4500EA6FBF /* UnexpectedEndOfDataErrorInfo.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E801366C26502B6800EA6FBF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E80136BC26502C4700EA6FBF /* UnexpectedDescriptorLoopLengthErrorInfo.swift in Sources */, + E80136CB26502C5600EA6FBF /* MsbBitReader.swift in Sources */, + E801367A26502C3200EA6FBF /* Data+hexString.swift in Sources */, + E80136AA26502C4600EA6FBF /* InvalidATSCContentIdentifierInUPIDInfo.swift in Sources */, + E80136BA26502C4700EA6FBF /* ParserError.swift in Sources */, + E80136B826502C4700EA6FBF /* UnexpectedSpliceCommandLengthErrorInfo.swift in Sources */, + E80136AF26502C4600EA6FBF /* SpliceTime.swift in Sources */, + E80136BF26502C4700EA6FBF /* SegmentationDescriptor+SegmentationUPIDType.swift in Sources */, + E80136B126502C4700EA6FBF /* AudioDescriptor.swift in Sources */, + E80136A426502C4600EA6FBF /* SpliceDescriptorTag.swift in Sources */, + E80136CF26502C5600EA6FBF /* ByteReader.swift in Sources */, + E80136B726502C4700EA6FBF /* BreakDuration.swift in Sources */, + E801367F26502C3900EA6FBF /* BitStreamMode.swift in Sources */, + E80136BB26502C4700EA6FBF /* PrivateCommand.swift in Sources */, + E801367B26502C3200EA6FBF /* SpliceInfoSection.swift in Sources */, + E80136A126502C4600EA6FBF /* InvalidBitStreamModeErrorInfo.swift in Sources */, + E80136C826502C5600EA6FBF /* Extensions.swift in Sources */, + E80136CC26502C5600EA6FBF /* MsbBitWriter.swift in Sources */, + E80136A826502C4600EA6FBF /* SpliceInsert.swift in Sources */, + E80136B426502C4700EA6FBF /* TimeSignal.swift in Sources */, + E80136A926502C4600EA6FBF /* AvailDescriptor.swift in Sources */, + E80136B526502C4700EA6FBF /* SpliceCommandType.swift in Sources */, + E801368126502C3900EA6FBF /* AudioCodingMode.swift in Sources */, + E80136CA26502C5600EA6FBF /* LsbBitWriter.swift in Sources */, + E801368026502C3900EA6FBF /* ATSCContentIdentifier.swift in Sources */, + E80136AE26502C4600EA6FBF /* DTMFDescriptor.swift in Sources */, + E80136AB26502C4600EA6FBF /* DataBitReader.swift in Sources */, + E80136B926502C4700EA6FBF /* SpliceDescriptor.swift in Sources */, + E80136B326502C4700EA6FBF /* ParserError+Code.swift in Sources */, + E80136A226502C4600EA6FBF /* InvalidMPUInSegmentationUPIDInfo.swift in Sources */, + E80136A626502C4600EA6FBF /* SpliceSchedule.swift in Sources */, + E80136CD26502C5600EA6FBF /* BitWriter.swift in Sources */, + E80136A526502C4600EA6FBF /* SegmentationDescriptor.swift in Sources */, + E80136B026502C4700EA6FBF /* TimeDescriptor.swift in Sources */, + E80136A326502C4600EA6FBF /* UnexpectedSegmentationUPIDLengthErrorInfo.swift in Sources */, + E80136C926502C5600EA6FBF /* LsbBitReader.swift in Sources */, + E80136BD26502C4700EA6FBF /* SegmentationDescriptor+SegmentationUPID.swift in Sources */, + E80136AC26502C4600EA6FBF /* SCTE35ParserError.swift in Sources */, + E80136A726502C4600EA6FBF /* SegmentationDescriptor+SegmentationTypeID.swift in Sources */, + E80136CE26502C5600EA6FBF /* BitReader.swift in Sources */, + E80136AD26502C4600EA6FBF /* SpliceCommand.swift in Sources */, + E80136B626502C4700EA6FBF /* DataReader.swift in Sources */, + E80136BE26502C4700EA6FBF /* UnexpectedSpliceDescriptorLengthErrorInfo.swift in Sources */, + E80136B226502C4700EA6FBF /* UnexpectedEndOfDataErrorInfo.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + OBJ_132 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 0; + files = ( + OBJ_133 /* Package.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + OBJ_143 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 0; + files = ( + OBJ_144 /* ParserErrorTests.swift in Sources */, + OBJ_145 /* MockDataBitReader.swift in Sources */, + OBJ_146 /* SCTE35ParserTests.swift in Sources */, + OBJ_147 /* UnexpectedEndOfDataErrorInfo+stub.swift in Sources */, + OBJ_148 /* BreakDurationTests.swift in Sources */, + OBJ_149 /* SpliceTimeTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + OBJ_82 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 0; + files = ( + OBJ_83 /* ATSCContentIdentifier.swift in Sources */, + OBJ_84 /* AudioCodingMode.swift in Sources */, + OBJ_85 /* BitStreamMode.swift in Sources */, + OBJ_86 /* BitReader.swift in Sources */, + OBJ_87 /* BitWriter.swift in Sources */, + OBJ_88 /* ByteReader.swift in Sources */, + OBJ_89 /* Extensions.swift in Sources */, + OBJ_90 /* LsbBitReader.swift in Sources */, + OBJ_91 /* LsbBitWriter.swift in Sources */, + OBJ_92 /* MsbBitReader.swift in Sources */, + OBJ_93 /* MsbBitWriter.swift in Sources */, + OBJ_94 /* DataBitReader.swift in Sources */, + OBJ_95 /* DataReader.swift in Sources */, + OBJ_96 /* Data+hexString.swift in Sources */, + OBJ_97 /* InvalidATSCContentIdentifierInUPIDInfo.swift in Sources */, + OBJ_98 /* InvalidBitStreamModeErrorInfo.swift in Sources */, + OBJ_99 /* InvalidMPUInSegmentationUPIDInfo.swift in Sources */, + OBJ_100 /* ParserError+Code.swift in Sources */, + OBJ_101 /* ParserError.swift in Sources */, + OBJ_102 /* SCTE35ParserError.swift in Sources */, + OBJ_103 /* UnexpectedDescriptorLoopLengthErrorInfo.swift in Sources */, + OBJ_104 /* UnexpectedEndOfDataErrorInfo.swift in Sources */, + OBJ_105 /* UnexpectedSegmentationUPIDLengthErrorInfo.swift in Sources */, + OBJ_106 /* UnexpectedSpliceCommandLengthErrorInfo.swift in Sources */, + OBJ_107 /* UnexpectedSpliceDescriptorLengthErrorInfo.swift in Sources */, + OBJ_108 /* PrivateCommand.swift in Sources */, + OBJ_109 /* SpliceCommand.swift in Sources */, + OBJ_110 /* SpliceCommandType.swift in Sources */, + OBJ_111 /* SpliceInsert.swift in Sources */, + OBJ_112 /* SpliceSchedule.swift in Sources */, + OBJ_113 /* TimeSignal.swift in Sources */, + OBJ_114 /* AudioDescriptor.swift in Sources */, + OBJ_115 /* AvailDescriptor.swift in Sources */, + OBJ_116 /* DTMFDescriptor.swift in Sources */, + OBJ_117 /* SegmentationDescriptor+SegmentationTypeID.swift in Sources */, + OBJ_118 /* SegmentationDescriptor+SegmentationUPID.swift in Sources */, + OBJ_119 /* SegmentationDescriptor+SegmentationUPIDType.swift in Sources */, + OBJ_120 /* SegmentationDescriptor.swift in Sources */, + OBJ_121 /* SpliceDescriptor.swift in Sources */, + OBJ_122 /* SpliceDescriptorTag.swift in Sources */, + OBJ_123 /* TimeDescriptor.swift in Sources */, + OBJ_124 /* SpliceInfoSection.swift in Sources */, + OBJ_125 /* BreakDuration.swift in Sources */, + OBJ_126 /* SpliceTime.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + OBJ_138 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = "SCTE35Parser::SCTE35ParserTests" /* SCTE35ParserTests */; + targetProxy = E801366A2650282100EA6FBF /* PBXContainerItemProxy */; + }; + OBJ_152 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = "SCTE35Parser::SCTE35Parser" /* SCTE35Parser_macOS */; + targetProxy = E801365C265026FA00EA6FBF /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + E80136682650282100EA6FBF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = SCTE35Parser.xcodeproj/SCTE35Parser_Info.plist; + INFOPLIST_OUTPUT_FORMAT = "same-as-input"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MARKETING_VERSION = 0.3.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = SCTE35Parser; + PRODUCT_MODULE_NAME = "$(PRODUCT_NAME)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TARGET_NAME = SCTE35Parser; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + E80136692650282100EA6FBF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = SCTE35Parser.xcodeproj/SCTE35Parser_Info.plist; + INFOPLIST_OUTPUT_FORMAT = "same-as-input"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MARKETING_VERSION = 0.3.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = SCTE35Parser; + PRODUCT_MODULE_NAME = "$(PRODUCT_NAME)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TARGET_NAME = SCTE35Parser; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + E801367626502B6800EA6FBF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = SCTE35Parser.xcodeproj/SCTE35Parser_Info.plist; + INFOPLIST_OUTPUT_FORMAT = "same-as-input"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MARKETING_VERSION = 0.3.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = SCTE35Parser; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 3; + TARGET_NAME = SCTE35Parser; + TVOS_DEPLOYMENT_TARGET = 9.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + E801367726502B6800EA6FBF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = SCTE35Parser.xcodeproj/SCTE35Parser_Info.plist; + INFOPLIST_OUTPUT_FORMAT = "same-as-input"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MARKETING_VERSION = 0.3.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = SCTE35Parser; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 3; + TARGET_NAME = SCTE35Parser; + TVOS_DEPLOYMENT_TARGET = 9.0; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + OBJ_130 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + LD = /usr/bin/true; + OTHER_SWIFT_FLAGS = "-swift-version 5 -I $(TOOLCHAIN_DIR)/usr/lib/swift/pm/4_2 -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk -package-description-version 5.3.0"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + OBJ_131 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + LD = /usr/bin/true; + OTHER_SWIFT_FLAGS = "-swift-version 5 -I $(TOOLCHAIN_DIR)/usr/lib/swift/pm/4_2 -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk -package-description-version 5.3.0"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + OBJ_136 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Debug; + }; + OBJ_137 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Release; + }; + OBJ_141 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + HEADER_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = SCTE35Parser.xcodeproj/SCTE35ParserTests_Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.15; + OTHER_CFLAGS = "$(inherited)"; + OTHER_LDFLAGS = "$(inherited)"; + OTHER_SWIFT_FLAGS = "$(inherited)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)"; + SWIFT_VERSION = 5.0; + TARGET_NAME = SCTE35ParserTests; + TVOS_DEPLOYMENT_TARGET = 9.0; + WATCHOS_DEPLOYMENT_TARGET = 7.0; + }; + name = Debug; + }; + OBJ_142 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + HEADER_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = SCTE35Parser.xcodeproj/SCTE35ParserTests_Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.15; + OTHER_CFLAGS = "$(inherited)"; + OTHER_LDFLAGS = "$(inherited)"; + OTHER_SWIFT_FLAGS = "$(inherited)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)"; + SWIFT_VERSION = 5.0; + TARGET_NAME = SCTE35ParserTests; + TVOS_DEPLOYMENT_TARGET = 9.0; + WATCHOS_DEPLOYMENT_TARGET = 7.0; + }; + name = Release; + }; + OBJ_3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_NS_ASSERTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "SWIFT_PACKAGE=1", + "DEBUG=1", + ); + MACOSX_DEPLOYMENT_TARGET = 10.10; + ONLY_ACTIVE_ARCH = YES; + OTHER_SWIFT_FLAGS = "$(inherited) -DXcode"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SUPPORTED_PLATFORMS = "$(AVAILABLE_PLATFORMS)"; + SUPPORTS_MACCATALYST = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) SWIFT_PACKAGE DEBUG"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + USE_HEADERMAP = NO; + }; + name = Debug; + }; + OBJ_4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_OPTIMIZATION_LEVEL = s; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "SWIFT_PACKAGE=1", + ); + MACOSX_DEPLOYMENT_TARGET = 10.10; + OTHER_SWIFT_FLAGS = "$(inherited) -DXcode"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SUPPORTED_PLATFORMS = "$(AVAILABLE_PLATFORMS)"; + SUPPORTS_MACCATALYST = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) SWIFT_PACKAGE"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + USE_HEADERMAP = NO; + }; + name = Release; + }; + OBJ_80 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CURRENT_PROJECT_VERSION = 1; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + HEADER_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = SCTE35Parser.xcodeproj/SCTE35Parser_Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) $(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MARKETING_VERSION = 0.3.0; + OTHER_CFLAGS = "$(inherited)"; + OTHER_LDFLAGS = "$(inherited)"; + OTHER_SWIFT_FLAGS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = SCTE35Parser; + PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)"; + SWIFT_VERSION = 5.0; + TARGET_NAME = SCTE35Parser; + TVOS_DEPLOYMENT_TARGET = 9.0; + VERSIONING_SYSTEM = "apple-generic"; + WATCHOS_DEPLOYMENT_TARGET = 2.0; + }; + name = Debug; + }; + OBJ_81 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CURRENT_PROJECT_VERSION = 1; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PLATFORM_DIR)/Developer/Library/Frameworks", + ); + HEADER_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = SCTE35Parser.xcodeproj/SCTE35Parser_Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) $(TOOLCHAIN_DIR)/usr/lib/swift/macosx"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MARKETING_VERSION = 0.3.0; + OTHER_CFLAGS = "$(inherited)"; + OTHER_LDFLAGS = "$(inherited)"; + OTHER_SWIFT_FLAGS = "$(inherited)"; + PRODUCT_BUNDLE_IDENTIFIER = SCTE35Parser; + PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)"; + SWIFT_VERSION = 5.0; + TARGET_NAME = SCTE35Parser; + TVOS_DEPLOYMENT_TARGET = 9.0; + VERSIONING_SYSTEM = "apple-generic"; + WATCHOS_DEPLOYMENT_TARGET = 2.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + E80136672650282100EA6FBF /* Build configuration list for PBXNativeTarget "SCTE35Parser_iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E80136682650282100EA6FBF /* Debug */, + E80136692650282100EA6FBF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E801367526502B6800EA6FBF /* Build configuration list for PBXNativeTarget "SCTE35Parser_tvOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E801367626502B6800EA6FBF /* Debug */, + E801367726502B6800EA6FBF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + OBJ_129 /* Build configuration list for PBXNativeTarget "SCTE35ParserPackageDescription" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + OBJ_130 /* Debug */, + OBJ_131 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + OBJ_135 /* Build configuration list for PBXAggregateTarget "SCTE35ParserPackageTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + OBJ_136 /* Debug */, + OBJ_137 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + OBJ_140 /* Build configuration list for PBXNativeTarget "SCTE35ParserTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + OBJ_141 /* Debug */, + OBJ_142 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + OBJ_2 /* Build configuration list for PBXProject "SCTE35Parser" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + OBJ_3 /* Debug */, + OBJ_4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + OBJ_79 /* Build configuration list for PBXNativeTarget "SCTE35Parser_macOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + OBJ_80 /* Debug */, + OBJ_81 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = OBJ_1 /* Project object */; +} diff --git a/SCTE35Parser.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SCTE35Parser.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..fe1aa71 --- /dev/null +++ b/SCTE35Parser.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/SCTE35Parser.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/SCTE35Parser.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/SCTE35Parser.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/SCTE35Parser.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/SCTE35Parser.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..a72dc2b --- /dev/null +++ b/SCTE35Parser.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded + + + \ No newline at end of file diff --git a/SCTE35Parser.xcodeproj/xcshareddata/xcschemes/SCTE35Parser_iOS.xcscheme b/SCTE35Parser.xcodeproj/xcshareddata/xcschemes/SCTE35Parser_iOS.xcscheme new file mode 100644 index 0000000..d2031f5 --- /dev/null +++ b/SCTE35Parser.xcodeproj/xcshareddata/xcschemes/SCTE35Parser_iOS.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SCTE35Parser.xcodeproj/xcshareddata/xcschemes/SCTE35Parser_macOS.xcscheme b/SCTE35Parser.xcodeproj/xcshareddata/xcschemes/SCTE35Parser_macOS.xcscheme new file mode 100644 index 0000000..abb650e --- /dev/null +++ b/SCTE35Parser.xcodeproj/xcshareddata/xcschemes/SCTE35Parser_macOS.xcscheme @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SCTE35Parser.xcodeproj/xcshareddata/xcschemes/SCTE35Parser_tvOS.xcscheme b/SCTE35Parser.xcodeproj/xcshareddata/xcschemes/SCTE35Parser_tvOS.xcscheme new file mode 100644 index 0000000..06dfbac --- /dev/null +++ b/SCTE35Parser.xcodeproj/xcshareddata/xcschemes/SCTE35Parser_tvOS.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + From a24e92e496ecdbfec23cc55f7c8cb8c8c7940982 Mon Sep 17 00:00:00 2001 From: theRealRobG Date: Sat, 15 May 2021 17:43:54 +0100 Subject: [PATCH 3/3] Update supported platforms --- .gitignore | 1 + SCTE35Parser.xcodeproj/project.pbxproj | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index ea8c4eb..49ca96d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /.build /Packages xcuserdata/ +Carthage/ diff --git a/SCTE35Parser.xcodeproj/project.pbxproj b/SCTE35Parser.xcodeproj/project.pbxproj index 9d96ab1..d9982ad 100644 --- a/SCTE35Parser.xcodeproj/project.pbxproj +++ b/SCTE35Parser.xcodeproj/project.pbxproj @@ -354,7 +354,7 @@ path = SpliceDescriptors; sourceTree = ""; }; - OBJ_5 /* */ = { + OBJ_5 = { isa = PBXGroup; children = ( OBJ_6 /* Package.swift */, @@ -364,7 +364,6 @@ OBJ_76 /* Specification */, OBJ_77 /* README.md */, ); - name = ""; sourceTree = ""; }; OBJ_58 /* Time */ = { @@ -604,7 +603,7 @@ knownRegions = ( en, ); - mainGroup = OBJ_5 /* */; + mainGroup = OBJ_5; productRefGroup = OBJ_73 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -890,6 +889,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; SUPPORTS_MACCATALYST = NO; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_VERSION = 5.0; @@ -962,6 +962,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; SUPPORTS_MACCATALYST = NO; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1033,6 +1034,7 @@ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = appletvos; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "appletvsimulator appletvos"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; @@ -1103,6 +1105,7 @@ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = appletvos; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = "appletvsimulator appletvos"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; TARGET_NAME = SCTE35Parser; @@ -1272,6 +1275,7 @@ PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)"; SWIFT_VERSION = 5.0; TARGET_NAME = SCTE35Parser; @@ -1306,6 +1310,7 @@ PRODUCT_MODULE_NAME = "$(TARGET_NAME:c99extidentifier)"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; + SUPPORTED_PLATFORMS = macosx; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)"; SWIFT_VERSION = 5.0; TARGET_NAME = SCTE35Parser;