refs #81
This commit is contained in:
parent
523b92f401
commit
935b798bb1
|
@ -2,15 +2,10 @@
|
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>lf</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>HaishinKit</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
|
@ -25,6 +20,11 @@
|
|||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>NSExtension</key>
|
||||
<dict>
|
||||
<key>NSExtensionPointIdentifier</key>
|
||||
|
|
|
@ -3,14 +3,18 @@ import Foundation
|
|||
import ReplayKit
|
||||
|
||||
class MovieClipHandler: RTMPMP4ClipHandler {
|
||||
|
||||
override func updateServiceInfo(_ serviceInfo: [String : NSCoding & NSObjectProtocol]) {
|
||||
print("updateServiceInfo:\(serviceInfo)")
|
||||
}
|
||||
|
||||
override func processMP4Clip(with mp4ClipURL: URL?, setupInfo: [String : NSObject]?, finished: Bool) {
|
||||
print("\(mp4ClipURL):\(setupInfo):\(finished)")
|
||||
print("processMP4Clip:\(mp4ClipURL):\(setupInfo):\(finished)")
|
||||
super.processMP4Clip(with: mp4ClipURL, setupInfo: setupInfo, finished: finished)
|
||||
}
|
||||
|
||||
override func finishedProcessingMP4Clip(withUpdatedBroadcastConfiguration broadcastConfiguration: RPBroadcastConfiguration?, error: Error?) {
|
||||
print("\(broadcastConfiguration):\(error)")
|
||||
print("finishedProcessingMP4Clip:\(broadcastConfiguration):\(error)")
|
||||
super.finishedProcessingMP4Clip(withUpdatedBroadcastConfiguration: broadcastConfiguration, error: error)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,14 +22,35 @@
|
|||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="rtmp://192.168.179.3:1935/live" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="GKU-M2-aRK">
|
||||
<rect key="frame" x="16" y="60" width="222" height="30"/>
|
||||
<rect key="frame" x="16" y="46" width="222" height="30"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<nil key="textColor"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
</textField>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="live" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="FrD-a4-wQl" userLabel="Stream name Field">
|
||||
<rect key="frame" x="16" y="108" width="222" height="30"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<nil key="textColor"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<textInputTraits key="textInputTraits"/>
|
||||
</textField>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="RTMP URL" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rw5-gU-PHU">
|
||||
<rect key="frame" x="16" y="20" width="83" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Stream name" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="r73-xK-C6s">
|
||||
<rect key="frame" x="16" y="82" width="102" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4nz-OC-sf0">
|
||||
<rect key="frame" x="252" y="59" width="34" height="30"/>
|
||||
<rect key="frame" x="254" y="46" width="34" height="30"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<state key="normal" title="Start"/>
|
||||
</button>
|
||||
|
@ -41,6 +62,7 @@
|
|||
<connections>
|
||||
<outlet property="endpointURLField" destination="GKU-M2-aRK" id="mGY-Jv-ucw"/>
|
||||
<outlet property="startButton" destination="4nz-OC-sf0" id="vuY-tv-8xP"/>
|
||||
<outlet property="streamNameField" destination="FrD-a4-wQl" id="yqx-kD-CtB"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="X47-rx-isc" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
|
|
|
@ -6,6 +6,9 @@ class BroadcastViewController: UIViewController {
|
|||
|
||||
@IBOutlet
|
||||
var endpointURLField:UITextField!
|
||||
|
||||
@IBOutlet
|
||||
var streamNameField:UITextField!
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
@ -16,9 +19,11 @@ class BroadcastViewController: UIViewController {
|
|||
|
||||
let broadcastURL:URL = URL(string: endpointURLField.text!)!
|
||||
|
||||
let streamName:String = streamNameField.text!
|
||||
let endpointURL:String = endpointURLField.text!
|
||||
let setupInfo: [String: NSCoding & NSObjectProtocol] = [
|
||||
"endpointURL" : endpointURL as NSString
|
||||
"endpointURL" : endpointURL as NSString,
|
||||
"streamName" : streamName as NSString,
|
||||
]
|
||||
|
||||
let broadcastConfiguration:RPBroadcastConfiguration = RPBroadcastConfiguration()
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>HaishinKit</string>
|
||||
<string>lf</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import UIKit
|
||||
import Foundation
|
||||
import AVFoundation
|
||||
|
||||
|
|
|
@ -5,6 +5,8 @@ import Foundation
|
|||
public class RTMPBroadcaster: RTMPConnection {
|
||||
static let `default`:RTMPBroadcaster = RTMPBroadcaster()
|
||||
|
||||
public var streamName:String? = nil
|
||||
|
||||
private var stream:RTMPStream!
|
||||
private var connecting:Bool = false
|
||||
private let lockQueue:DispatchQueue = DispatchQueue(label: "com.github.shogo4405.lf.RTMPBroadcaster.lock")
|
||||
|
@ -25,28 +27,32 @@ public class RTMPBroadcaster: RTMPConnection {
|
|||
}
|
||||
|
||||
override public func close() {
|
||||
connecting = false
|
||||
super.close()
|
||||
lockQueue.sync {
|
||||
self.connecting = false
|
||||
super.close()
|
||||
}
|
||||
}
|
||||
|
||||
func processMP4Clip(mp4ClipURL: URL?, completionHandler: MP4Sampler.Handler) {
|
||||
func processMP4Clip(mp4ClipURL: URL?, completionHandler: MP4Sampler.Handler? = nil) {
|
||||
guard let url:URL = mp4ClipURL else {
|
||||
completionHandler()
|
||||
completionHandler?()
|
||||
return
|
||||
}
|
||||
stream.appendFile(url)
|
||||
completionHandler()
|
||||
stream.appendFile(url, completionHandler: completionHandler)
|
||||
}
|
||||
|
||||
override func on(status:Notification) {
|
||||
super.on(status: status)
|
||||
let e:Event = Event.from(status)
|
||||
guard let data:ASObject = e.data as? ASObject, let code:String = data["code"] as? String else {
|
||||
guard
|
||||
let data:ASObject = e.data as? ASObject,
|
||||
let code:String = data["code"] as? String,
|
||||
let streamName:String = streamName else {
|
||||
return
|
||||
}
|
||||
switch code {
|
||||
case RTMPConnection.Code.connectSuccess.rawValue:
|
||||
stream.publish("live")
|
||||
stream.publish(streamName)
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
@ -61,14 +67,24 @@ open class RTMPMP4ClipHandler: RPBroadcastMP4ClipHandler {
|
|||
}
|
||||
|
||||
override open func processMP4Clip(with mp4ClipURL: URL?, setupInfo: [String : NSObject]?, finished: Bool) {
|
||||
guard let endpointURL:String = setupInfo?["endpointURL"] as? String else {
|
||||
guard
|
||||
let endpointURL:String = setupInfo?["endpointURL"] as? String,
|
||||
let streamName:String = setupInfo?["streamName"] as? String else {
|
||||
return
|
||||
}
|
||||
RTMPBroadcaster.default.streamName = streamName
|
||||
RTMPBroadcaster.default.connect(endpointURL, arguments: nil)
|
||||
RTMPBroadcaster.default.processMP4Clip(mp4ClipURL: mp4ClipURL) {_ in
|
||||
if (finished) {
|
||||
RTMPBroadcaster.default.close()
|
||||
if (finished) {
|
||||
RTMPBroadcaster.default.processMP4Clip(mp4ClipURL: mp4ClipURL) {_ in
|
||||
if (finished) {
|
||||
RTMPBroadcaster.default.close()
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
RTMPBroadcaster.default.processMP4Clip(mp4ClipURL: mp4ClipURL)
|
||||
}
|
||||
|
||||
override open func finishedProcessingMP4Clip(withUpdatedBroadcastConfiguration broadcastConfiguration: RPBroadcastConfiguration?, error: Error?) {
|
||||
}
|
||||
}
|
||||
|
|
|
@ -574,7 +574,7 @@ final class MP4Reader: MP4ContainerBox {
|
|||
|
||||
// MARK: -
|
||||
final class MP4TrakReader {
|
||||
static let defaultBufferTime:Double = 1000
|
||||
static let defaultBufferTime:Double = 500
|
||||
|
||||
var trak:MP4Box
|
||||
var bufferTime:Double = MP4TrakReader.defaultBufferTime
|
||||
|
@ -661,13 +661,13 @@ final class MP4TrakReader {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
totalTimeToSample = timeToSample[cursor]
|
||||
}
|
||||
|
||||
func execute(url:URL) {
|
||||
do {
|
||||
reader = try FileHandle(forReadingFrom: url)
|
||||
timerDriver.interval = MachUtil.nanosToAbs(UInt64(currentTimeToSample * 1000 * 1000))
|
||||
while (currentDuration <= bufferTime) {
|
||||
tick(timerDriver)
|
||||
}
|
||||
|
|
|
@ -14,7 +14,8 @@ class MP4Sampler {
|
|||
weak var delegate:MP4SamplerDelegate?
|
||||
|
||||
fileprivate(set) var running:Bool = false
|
||||
fileprivate var files:[URL:Handler?] = [:]
|
||||
fileprivate var files:[URL] = []
|
||||
fileprivate var handlers:[URL:Handler?] = [:]
|
||||
fileprivate let lockQueue:DispatchQueue = DispatchQueue(label: "com.github.shogo4405.lf.MP4Sampler.lock")
|
||||
fileprivate let loopQueue:DispatchQueue = DispatchQueue(label: "com.github.shgoo4405.lf.MP4Sampler.loop")
|
||||
fileprivate let operations:OperationQueue = OperationQueue()
|
||||
|
@ -24,7 +25,8 @@ class MP4Sampler {
|
|||
|
||||
func appendFile(_ file:URL, completionHandler: Handler? = nil) {
|
||||
lockQueue.async {
|
||||
self.files[file] = completionHandler
|
||||
self.files.append(file)
|
||||
self.handlers[file] = completionHandler
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -54,10 +56,10 @@ class MP4Sampler {
|
|||
}
|
||||
}
|
||||
|
||||
for i in 0..<trakReaders.count {
|
||||
for reader in trakReaders {
|
||||
reader.delegate = delegate
|
||||
operations.addOperation {
|
||||
self.trakReaders[i].delegate = self.delegate
|
||||
self.trakReaders[i].execute(url: url)
|
||||
reader.execute(url: url)
|
||||
}
|
||||
}
|
||||
operations.waitUntilAllOperationsAreFinished()
|
||||
|
@ -69,7 +71,10 @@ class MP4Sampler {
|
|||
if (files.isEmpty) {
|
||||
return
|
||||
}
|
||||
let (key: url, value: handler) = files.popFirst()!
|
||||
let url:URL = files.first!
|
||||
let handler:Handler? = handlers[url]!
|
||||
files.remove(at: 0)
|
||||
handlers[url] = nil
|
||||
execute(url: url)
|
||||
handler?()
|
||||
}
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
#if os(iOS)
|
||||
import UIKit
|
||||
#endif
|
||||
import CoreImage
|
||||
import Foundation
|
||||
import AVFoundation
|
||||
|
||||
|
|
|
@ -13,14 +13,12 @@ final class RTMPMuxer {
|
|||
weak var delegate:RTMPMuxerDelegate? = nil
|
||||
fileprivate var avcC:Data?
|
||||
fileprivate var audioDecorderSpecificConfig:Data?
|
||||
fileprivate var timestamps:[Int:Double] = [:]
|
||||
fileprivate var audioTimestamp:CMTime = kCMTimeZero
|
||||
fileprivate var videoTimestamp:CMTime = kCMTimeZero
|
||||
|
||||
func dispose() {
|
||||
avcC = nil
|
||||
audioDecorderSpecificConfig = nil
|
||||
timestamps.removeAll()
|
||||
audioTimestamp = kCMTimeZero
|
||||
videoTimestamp = kCMTimeZero
|
||||
}
|
||||
|
@ -127,21 +125,19 @@ extension RTMPMuxer: MP4SamplerDelegate {
|
|||
}
|
||||
|
||||
func output(data:Data, withType:Int, currentTime:Double, keyframe:Bool) {
|
||||
let delta:Double = (timestamps[withType] == nil) ? 0 : timestamps[withType]!
|
||||
switch withType {
|
||||
case 0:
|
||||
let compositionTime:Int32 = 0
|
||||
var buffer:Data = Data([((keyframe ? FLVFrameType.key.rawValue : FLVFrameType.inter.rawValue) << 4) | FLVVideoCodec.avc.rawValue, FLVAVCPacketType.nal.rawValue])
|
||||
buffer.append(contentsOf: compositionTime.bigEndian.bytes[1..<4])
|
||||
buffer.append(data)
|
||||
delegate?.sampleOutput(video: buffer, withTimestamp: delta, muxer: self)
|
||||
delegate?.sampleOutput(video: buffer, withTimestamp: currentTime, muxer: self)
|
||||
case 1:
|
||||
var buffer:Data = Data([RTMPMuxer.aac, FLVAACPacketType.raw.rawValue])
|
||||
buffer.append(data)
|
||||
delegate?.sampleOutput(audio: buffer, withTimestamp: delta, muxer: self)
|
||||
delegate?.sampleOutput(audio: buffer, withTimestamp: currentTime, muxer: self)
|
||||
default:
|
||||
break
|
||||
}
|
||||
timestamps[withType] = currentTime
|
||||
}
|
||||
}
|
||||
|
|
|
@ -74,9 +74,14 @@ final class RTMPSocket: NetSocket, RTMPSocketCompatible {
|
|||
for chunk in chunks {
|
||||
doOutput(bytes: chunk)
|
||||
}
|
||||
if (logger.isEnabledFor(level: .verbose)) {
|
||||
logger.verbose(chunk.description)
|
||||
//if (logger.isEnabledFor(level: .verbose)) {
|
||||
// logger.info(chunk)
|
||||
|
||||
if let video:RTMPVideoMessage = chunk.message as? RTMPVideoMessage {
|
||||
logger.info(video.timestamp)
|
||||
}
|
||||
|
||||
//}
|
||||
return chunk.message!.length
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
#if os(iOS)
|
||||
import UIKit
|
||||
#endif
|
||||
import Foundation
|
||||
import AVFoundation
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ import XCTest
|
|||
@testable import lf
|
||||
|
||||
final class MP4SamplerTests: XCTestCase {
|
||||
func main() {
|
||||
func testMain() {
|
||||
let bundle:Bundle = Bundle(for: type(of: self))
|
||||
let url:URL = URL(fileURLWithPath: bundle.path(forResource: "SampleVideo_360x240_5mb", ofType: "mp4")!)
|
||||
let sampler:MP4Sampler = MP4Sampler()
|
||||
|
|
|
@ -4,7 +4,7 @@ import XCTest
|
|||
@testable import lf
|
||||
|
||||
final class RTMPConnectionTests: XCTestCase {
|
||||
func testPublish() {
|
||||
func publish() {
|
||||
let bundle:Bundle = Bundle(for: type(of: self))
|
||||
let url:URL = URL(fileURLWithPath: bundle.path(forResource: "SampleVideo_360x240_5mb-base", ofType: "mp4")!)
|
||||
let connection:RTMPConnection = RTMPConnection()
|
||||
|
|
|
@ -4,7 +4,7 @@ import XCTest
|
|||
@testable import lf
|
||||
|
||||
final class TimerDriverTests: XCTestCase {
|
||||
func main() {
|
||||
func testmain() {
|
||||
let timerDriver:TimerDriver = TimerDriver()
|
||||
let delegate:TimerDriverDelegate = LoggerTimerDriverDelegate()
|
||||
timerDriver.delegate = delegate
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 47;
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
|
@ -27,7 +27,6 @@
|
|||
290EA8AB1DFB61E700053022 /* EventDispatcherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 290EA8A61DFB61E700053022 /* EventDispatcherTests.swift */; };
|
||||
290EA8AC1DFB61E700053022 /* MD5Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 290EA8A71DFB61E700053022 /* MD5Tests.swift */; };
|
||||
290EA8AD1DFB61E700053022 /* TimerDriverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 290EA8A81DFB61E700053022 /* TimerDriverTests.swift */; };
|
||||
2911F9901DE2DA19007FD1EC /* lf.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 29B8761B1CD701F900FC07DA /* lf.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
2911F9C01DE53F2A007FD1EC /* XCGLogger.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2911F9BF1DE53F2A007FD1EC /* XCGLogger.framework */; };
|
||||
2911F9C11DE53F39007FD1EC /* XCGLogger.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2911F9BF1DE53F2A007FD1EC /* XCGLogger.framework */; };
|
||||
2915EC4D1D85BB8C00621092 /* RTMPTSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294852551D84BFAD002DE492 /* RTMPTSocket.swift */; };
|
||||
|
@ -58,8 +57,9 @@
|
|||
2931204F1D4529F900B14211 /* RTSPRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2931204B1D4522CF00B14211 /* RTSPRequest.swift */; };
|
||||
293120501D4529FB00B14211 /* RTSPResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2931204D1D4522E400B14211 /* RTSPResponse.swift */; };
|
||||
293C74371D85D56D001ED43C /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 293C74361D85D56D001ED43C /* MainInterface.storyboard */; };
|
||||
293C74381D85DA4B001ED43C /* lf.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2945CBBD1B4BE66000104112 /* lf.framework */; };
|
||||
2942424D1CF4C01300D65DCB /* MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2942424C1CF4C01300D65DCB /* MD5.swift */; };
|
||||
2942EF841DFF4D06008E620C /* lf.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2945CBBD1B4BE66000104112 /* lf.framework */; };
|
||||
2942EF861DFF4D3C008E620C /* lf.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 2945CBBD1B4BE66000104112 /* lf.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
294852571D852499002DE492 /* RTMPTSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294852551D84BFAD002DE492 /* RTMPTSocket.swift */; };
|
||||
2955F51F1D09EBAD004CC995 /* VisualEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 296897461CDB01D20074D5F0 /* VisualEffect.swift */; };
|
||||
2962425E1D8BFC7B00C451A3 /* MovieClipHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 292D8A301D8B233C00DBECE2 /* MovieClipHandler.swift */; };
|
||||
|
@ -102,7 +102,6 @@
|
|||
299B131D1D35272D00A1E8F5 /* ScreenCaptureSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 299B131C1D35272D00A1E8F5 /* ScreenCaptureSession.swift */; };
|
||||
299B13271D3B751400A1E8F5 /* LFView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 299B13261D3B751400A1E8F5 /* LFView.swift */; };
|
||||
29A39C8E1D85BF6F007C27E9 /* BroadcastViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29A39C831D85BF21007C27E9 /* BroadcastViewController.swift */; };
|
||||
29A39C921D85CF5F007C27E9 /* RTMPMP4ClipHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29A39C911D85CF5E007C27E9 /* RTMPMP4ClipHandler.swift */; };
|
||||
29AF3FCF1D7C744C00E41212 /* NetStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29AF3FCE1D7C744C00E41212 /* NetStream.swift */; };
|
||||
29AF3FD01D7C745200E41212 /* NetStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29AF3FCE1D7C744C00E41212 /* NetStream.swift */; };
|
||||
29B8765B1CD70A7900FC07DA /* AACEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B876571CD70A7900FC07DA /* AACEncoder.swift */; };
|
||||
|
@ -198,8 +197,9 @@
|
|||
29BCFFA71D68C75B00F1A726 /* RTPService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29BCFFA51D68C75A00F1A726 /* RTPService.swift */; };
|
||||
29C263181D00804A0098D4EF /* GLLFView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C263171D00804A0098D4EF /* GLLFView.swift */; };
|
||||
29C2631C1D0083B50098D4EF /* VideoIOComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B8768E1CD70AFE00FC07DA /* VideoIOComponent.swift */; };
|
||||
29C932A71CD7867C00283FC5 /* lf.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2945CBBD1B4BE66000104112 /* lf.framework */; settings = {ATTRIBUTES = (Required, ); }; };
|
||||
29D0E3681DD4CE3700863B3B /* AnyUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 298BCF321DD4C44A007FF86A /* AnyUtil.swift */; };
|
||||
29DC67051E00477900A7DC71 /* lf.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2945CBBD1B4BE66000104112 /* lf.framework */; };
|
||||
29DC67071E00491D00A7DC71 /* RTMPMP4ClipHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29DC67061E00491C00A7DC71 /* RTMPMP4ClipHandler.swift */; };
|
||||
29DD70E41D68CACA0021904A /* RTSPStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29DD70E31D68CACA0021904A /* RTSPStream.swift */; };
|
||||
29DD70E61D68CF020021904A /* RTPPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29DD70E51D68CF020021904A /* RTPPacket.swift */; };
|
||||
29DD70E71D68D45E0021904A /* RTSPStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29DD70E31D68CACA0021904A /* RTSPStream.swift */; };
|
||||
|
@ -273,7 +273,6 @@
|
|||
dstPath = "";
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
2911F9901DE2DA19007FD1EC /* lf.framework in CopyFiles */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -295,6 +294,7 @@
|
|||
dstPath = "";
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
2942EF861DFF4D3C008E620C /* lf.framework in Embed Frameworks */,
|
||||
);
|
||||
name = "Embed Frameworks";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
|
@ -382,7 +382,6 @@
|
|||
29A39C831D85BF21007C27E9 /* BroadcastViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BroadcastViewController.swift; path = Examples/iOS/ScreencastUI/BroadcastViewController.swift; sourceTree = "<group>"; };
|
||||
29A39C841D85BF21007C27E9 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Examples/iOS/ScreencastUI/Info.plist; sourceTree = "<group>"; };
|
||||
29A39C881D85BF30007C27E9 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Examples/iOS/Screencast/Info.plist; sourceTree = "<group>"; };
|
||||
29A39C911D85CF5E007C27E9 /* RTMPMP4ClipHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RTMPMP4ClipHandler.swift; path = Platforms/iOS/RTMPMP4ClipHandler.swift; sourceTree = "<group>"; };
|
||||
29AF3FCE1D7C744C00E41212 /* NetStream.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NetStream.swift; path = Sources/Net/NetStream.swift; sourceTree = SOURCE_ROOT; };
|
||||
29B8761B1CD701F900FC07DA /* lf.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = lf.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
29B876571CD70A7900FC07DA /* AACEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AACEncoder.swift; path = Sources/Codec/AACEncoder.swift; sourceTree = SOURCE_ROOT; };
|
||||
|
@ -439,6 +438,7 @@
|
|||
29C263171D00804A0098D4EF /* GLLFView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GLLFView.swift; path = Platforms/iOS/GLLFView.swift; sourceTree = "<group>"; };
|
||||
29C9327E1CD76FB800283FC5 /* Example iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Example iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
29C932941CD76FD300283FC5 /* Example macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Example macOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
29DC67061E00491C00A7DC71 /* RTMPMP4ClipHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RTMPMP4ClipHandler.swift; path = Platforms/iOS/RTMPMP4ClipHandler.swift; sourceTree = "<group>"; };
|
||||
29DD70E31D68CACA0021904A /* RTSPStream.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RTSPStream.swift; path = Sources/RTSP/RTSPStream.swift; sourceTree = SOURCE_ROOT; };
|
||||
29DD70E51D68CF020021904A /* RTPPacket.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RTPPacket.swift; path = Sources/RTP/RTPPacket.swift; sourceTree = SOURCE_ROOT; };
|
||||
29E258361D7C249B0070DC07 /* lf.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = lf.podspec; sourceTree = "<group>"; };
|
||||
|
@ -452,7 +452,7 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
293C74381D85DA4B001ED43C /* lf.framework in Frameworks */,
|
||||
29DC67051E00477900A7DC71 /* lf.framework in Frameworks */,
|
||||
2915EC541D85BDF100621092 /* ReplayKit.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
|
@ -494,8 +494,8 @@
|
|||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
2942EF841DFF4D06008E620C /* lf.framework in Frameworks */,
|
||||
29F5FEA61DE2C70A00D0CCB4 /* XCGLogger.framework in Frameworks */,
|
||||
29C932A71CD7867C00283FC5 /* lf.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -829,8 +829,8 @@
|
|||
299F7E3A1CD71A97001E7272 /* Info.plist */,
|
||||
299F7E3B1CD71A97001E7272 /* lf.h */,
|
||||
299B13261D3B751400A1E8F5 /* LFView.swift */,
|
||||
29A39C911D85CF5E007C27E9 /* RTMPMP4ClipHandler.swift */,
|
||||
299B131C1D35272D00A1E8F5 /* ScreenCaptureSession.swift */,
|
||||
29DC67061E00491C00A7DC71 /* RTMPMP4ClipHandler.swift */,
|
||||
);
|
||||
name = iOS;
|
||||
sourceTree = "<group>";
|
||||
|
@ -936,8 +936,8 @@
|
|||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 2915EC751D85BDF200621092 /* Build configuration list for PBXNativeTarget "Screencast" */;
|
||||
buildPhases = (
|
||||
2915EC4E1D85BDF100621092 /* Sources */,
|
||||
2915EC4F1D85BDF100621092 /* Frameworks */,
|
||||
2915EC4E1D85BDF100621092 /* Sources */,
|
||||
2915EC501D85BDF100621092 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
|
@ -966,9 +966,9 @@
|
|||
productReference = 2915EC5F1D85BDF100621092 /* ScreencastUI.appex */;
|
||||
productType = "com.apple.product-type.app-extension";
|
||||
};
|
||||
2945CBBC1B4BE66000104112 /* lf iOS */ = {
|
||||
2945CBBC1B4BE66000104112 /* iOS */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 2945CBD31B4BE66000104112 /* Build configuration list for PBXNativeTarget "lf iOS" */;
|
||||
buildConfigurationList = 2945CBD31B4BE66000104112 /* Build configuration list for PBXNativeTarget "iOS" */;
|
||||
buildPhases = (
|
||||
2945CBB81B4BE66000104112 /* Sources */,
|
||||
2945CBBA1B4BE66000104112 /* Headers */,
|
||||
|
@ -981,7 +981,7 @@
|
|||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = "lf iOS";
|
||||
name = iOS;
|
||||
productName = lf;
|
||||
productReference = 2945CBBD1B4BE66000104112 /* lf.framework */;
|
||||
productType = "com.apple.product-type.framework";
|
||||
|
@ -1005,9 +1005,9 @@
|
|||
productReference = 29798E591CE60E5300F5CBD0 /* Tests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
29B8761A1CD701F900FC07DA /* lf macOS */ = {
|
||||
29B8761A1CD701F900FC07DA /* macOS */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 29B876201CD701F900FC07DA /* Build configuration list for PBXNativeTarget "lf macOS" */;
|
||||
buildConfigurationList = 29B876201CD701F900FC07DA /* Build configuration list for PBXNativeTarget "macOS" */;
|
||||
buildPhases = (
|
||||
29B876161CD701F900FC07DA /* Sources */,
|
||||
29B876171CD701F900FC07DA /* Frameworks */,
|
||||
|
@ -1019,7 +1019,7 @@
|
|||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = "lf macOS";
|
||||
name = macOS;
|
||||
productName = lfMacOS;
|
||||
productReference = 29B8761B1CD701F900FC07DA /* lf.framework */;
|
||||
productType = "com.apple.product-type.framework";
|
||||
|
@ -1092,7 +1092,7 @@
|
|||
attributes = {
|
||||
LastSwiftMigration = 0700;
|
||||
LastSwiftUpdateCheck = 0800;
|
||||
LastUpgradeCheck = 0800;
|
||||
LastUpgradeCheck = 0810;
|
||||
ORGANIZATIONNAME = "Shogo Endo";
|
||||
TargetAttributes = {
|
||||
2915EC511D85BDF100621092 = {
|
||||
|
@ -1107,6 +1107,7 @@
|
|||
};
|
||||
2945CBBC1B4BE66000104112 = {
|
||||
CreatedOnToolsVersion = 6.4;
|
||||
DevelopmentTeam = SUEQ2SZ2L5;
|
||||
LastSwiftMigration = 0800;
|
||||
};
|
||||
29798E581CE60E5300F5CBD0 = {
|
||||
|
@ -1132,7 +1133,7 @@
|
|||
};
|
||||
};
|
||||
buildConfigurationList = 2945CBB71B4BE66000104112 /* Build configuration list for PBXProject "lf" */;
|
||||
compatibilityVersion = "Xcode 6.3";
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
|
@ -1144,8 +1145,8 @@
|
|||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
2945CBBC1B4BE66000104112 /* lf iOS */,
|
||||
29B8761A1CD701F900FC07DA /* lf macOS */,
|
||||
2945CBBC1B4BE66000104112 /* iOS */,
|
||||
29B8761A1CD701F900FC07DA /* macOS */,
|
||||
29C9327D1CD76FB800283FC5 /* Example iOS */,
|
||||
29C932931CD76FD300283FC5 /* Example macOS */,
|
||||
2915EC511D85BDF100621092 /* Screencast */,
|
||||
|
@ -1336,7 +1337,6 @@
|
|||
29B876841CD70AE800FC07DA /* H264+AVC.swift in Sources */,
|
||||
296242621D8DB86500C451A3 /* TSWriter.swift in Sources */,
|
||||
29B8769B1CD70B1100FC07DA /* MIME.swift in Sources */,
|
||||
29A39C921D85CF5F007C27E9 /* RTMPMP4ClipHandler.swift in Sources */,
|
||||
29B8769C1CD70B1100FC07DA /* NetClient.swift in Sources */,
|
||||
29B876871CD70AE800FC07DA /* ProgramSpecific.swift in Sources */,
|
||||
298BCF331DD4C44A007FF86A /* AnyUtil.swift in Sources */,
|
||||
|
@ -1363,6 +1363,7 @@
|
|||
29C263181D00804A0098D4EF /* GLLFView.swift in Sources */,
|
||||
29B876881CD70AE800FC07DA /* TransportStream.swift in Sources */,
|
||||
29B876BE1CD70B3900FC07DA /* EventDispatcher.swift in Sources */,
|
||||
29DC67071E00491D00A7DC71 /* RTMPMP4ClipHandler.swift in Sources */,
|
||||
29B8769D1CD70B1100FC07DA /* NetService.swift in Sources */,
|
||||
29B8769E1CD70B1100FC07DA /* NetSocket.swift in Sources */,
|
||||
29B876791CD70ACE00FC07DA /* HTTPStream.swift in Sources */,
|
||||
|
@ -1532,7 +1533,7 @@
|
|||
};
|
||||
29798E601CE60E5300F5CBD0 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 29B8761A1CD701F900FC07DA /* lf macOS */;
|
||||
target = 29B8761A1CD701F900FC07DA /* macOS */;
|
||||
targetProxy = 29798E5F1CE60E5300F5CBD0 /* PBXContainerItemProxy */;
|
||||
};
|
||||
29798E651CE60E5E00F5CBD0 /* PBXTargetDependency */ = {
|
||||
|
@ -1542,12 +1543,12 @@
|
|||
};
|
||||
29BA5B951D50BEAD00A51EA8 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 29B8761A1CD701F900FC07DA /* lf macOS */;
|
||||
target = 29B8761A1CD701F900FC07DA /* macOS */;
|
||||
targetProxy = 29BA5B941D50BEAD00A51EA8 /* PBXContainerItemProxy */;
|
||||
};
|
||||
29C932A91CD78B5500283FC5 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 2945CBBC1B4BE66000104112 /* lf iOS */;
|
||||
target = 2945CBBC1B4BE66000104112 /* iOS */;
|
||||
targetProxy = 29C932A81CD78B5500283FC5 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
@ -1753,8 +1754,9 @@
|
|||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = SUEQ2SZ2L5;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
|
@ -1781,8 +1783,9 @@
|
|||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = SUEQ2SZ2L5;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
|
@ -1931,6 +1934,7 @@
|
|||
29C9328E1CD76FB800283FC5 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
|
@ -1955,6 +1959,7 @@
|
|||
29C9328F1CD76FB800283FC5 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
|
@ -2045,7 +2050,7 @@
|
|||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
2945CBD31B4BE66000104112 /* Build configuration list for PBXNativeTarget "lf iOS" */ = {
|
||||
2945CBD31B4BE66000104112 /* Build configuration list for PBXNativeTarget "iOS" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
2945CBD41B4BE66000104112 /* Debug */,
|
||||
|
@ -2063,7 +2068,7 @@
|
|||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
29B876201CD701F900FC07DA /* Build configuration list for PBXNativeTarget "lf macOS" */ = {
|
||||
29B876201CD701F900FC07DA /* Build configuration list for PBXNativeTarget "macOS" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
29B876211CD701F900FC07DA /* Debug */,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0800"
|
||||
LastUpgradeVersion = "0810"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
@ -16,7 +16,7 @@
|
|||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "2945CBBC1B4BE66000104112"
|
||||
BuildableName = "lf.framework"
|
||||
BlueprintName = "lf iOS"
|
||||
BlueprintName = "iOS"
|
||||
ReferencedContainer = "container:lf.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
|
@ -47,7 +47,7 @@
|
|||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "2945CBBC1B4BE66000104112"
|
||||
BuildableName = "lf.framework"
|
||||
BlueprintName = "lf iOS"
|
||||
BlueprintName = "iOS"
|
||||
ReferencedContainer = "container:lf.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
|
@ -65,7 +65,7 @@
|
|||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "2945CBBC1B4BE66000104112"
|
||||
BuildableName = "lf.framework"
|
||||
BlueprintName = "lf iOS"
|
||||
BlueprintName = "iOS"
|
||||
ReferencedContainer = "container:lf.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0800"
|
||||
LastUpgradeVersion = "0810"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
@ -16,7 +16,7 @@
|
|||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "29B8761A1CD701F900FC07DA"
|
||||
BuildableName = "lf.framework"
|
||||
BlueprintName = "lf macOS"
|
||||
BlueprintName = "macOS"
|
||||
ReferencedContainer = "container:lf.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
|
@ -47,7 +47,7 @@
|
|||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "29B8761A1CD701F900FC07DA"
|
||||
BuildableName = "lf.framework"
|
||||
BlueprintName = "lf macOS"
|
||||
BlueprintName = "macOS"
|
||||
ReferencedContainer = "container:lf.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
|
@ -65,7 +65,7 @@
|
|||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "29B8761A1CD701F900FC07DA"
|
||||
BuildableName = "lf.framework"
|
||||
BlueprintName = "lf macOS"
|
||||
BlueprintName = "macOS"
|
||||
ReferencedContainer = "container:lf.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
Loading…
Reference in New Issue