Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 32 additions & 32 deletions SoundflowerBed/AppController.mm
Original file line number Diff line number Diff line change
Expand Up @@ -463,42 +463,42 @@ - (void)InstallListeners;
int index = 0;
for (AudioDeviceList::DeviceList::iterator i = thelist.begin(); i != thelist.end(); ++i, ++index) {
if (0 == strncmp("Soundflower", (*i).mName, strlen("Soundflower"))) {
//verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioStreamPropertyPhysicalFormat, DeviceListenerProc, self));
//verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertyStreamFormat, DeviceListenerProc, self));
verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertyNominalSampleRate, DeviceListenerProc, self));
//verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertyLatency, DeviceListenerProc, self));
//verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertySafetyOffset, DeviceListenerProc, self));
verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertyStreamConfiguration, DeviceListenerProc, self));
//verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertyAvailableNominalSampleRates, DeviceListenerProc, self));
//__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioStreamPropertyPhysicalFormat, DeviceListenerProc, self));
//__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertyStreamFormat, DeviceListenerProc, self));
__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertyNominalSampleRate, DeviceListenerProc, self));
//__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertyLatency, DeviceListenerProc, self));
//__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertySafetyOffset, DeviceListenerProc, self));
__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertyStreamConfiguration, DeviceListenerProc, self));
//__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertyAvailableNominalSampleRates, DeviceListenerProc, self));

verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertyDeviceIsAlive, DeviceListenerProc, self));
verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertyDeviceHasChanged, DeviceListenerProc, self));
verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertyDeviceIsRunning, DeviceListenerProc, self));
verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDeviceProcessorOverload, DeviceListenerProc, self));
__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertyDeviceIsAlive, DeviceListenerProc, self));
__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertyDeviceHasChanged, DeviceListenerProc, self));
__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDevicePropertyDeviceIsRunning, DeviceListenerProc, self));
__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, true, kAudioDeviceProcessorOverload, DeviceListenerProc, self));
}
else {
//verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioStreamPropertyPhysicalFormat, DeviceListenerProc, self));
//verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioDevicePropertyStreamFormat, DeviceListenerProc, self));
verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioDevicePropertyNominalSampleRate, DeviceListenerProc, self));
//verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioDevicePropertyLatency, DeviceListenerProc, self));
//verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioDevicePropertySafetyOffset, DeviceListenerProc, self));
verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioDevicePropertyStreamConfiguration, DeviceListenerProc, self));
verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioDevicePropertyStreams, DeviceListenerProc, self));
//verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioDevicePropertyAvailableNominalSampleRates, DeviceListenerProc, self));
//__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioStreamPropertyPhysicalFormat, DeviceListenerProc, self));
//__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioDevicePropertyStreamFormat, DeviceListenerProc, self));
__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioDevicePropertyNominalSampleRate, DeviceListenerProc, self));
//__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioDevicePropertyLatency, DeviceListenerProc, self));
//__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioDevicePropertySafetyOffset, DeviceListenerProc, self));
__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioDevicePropertyStreamConfiguration, DeviceListenerProc, self));
__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioDevicePropertyStreams, DeviceListenerProc, self));
//__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioDevicePropertyAvailableNominalSampleRates, DeviceListenerProc, self));

// this provides us, for example, with notification when the headphones are plugged/unplugged during playback
verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioDevicePropertyDataSource, DeviceListenerProc, self));
__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 0, false, kAudioDevicePropertyDataSource, DeviceListenerProc, self));

verify_noerr (AudioDeviceAddPropertyListener((*i).mID, 1, false, kAudioDevicePropertyVolumeScalar, DeviceListenerProc, self));
__Verify_noErr (AudioDeviceAddPropertyListener((*i).mID, 1, false, kAudioDevicePropertyVolumeScalar, DeviceListenerProc, self));
}
}

// check for added/removed devices
verify_noerr (AudioHardwareAddPropertyListener(kAudioHardwarePropertyDevices, HardwareListenerProc, self));
__Verify_noErr (AudioHardwareAddPropertyListener(kAudioHardwarePropertyDevices, HardwareListenerProc, self));

verify_noerr (AudioHardwareAddPropertyListener(kAudioHardwarePropertyIsInitingOrExiting, HardwareListenerProc, self));
verify_noerr (AudioHardwareAddPropertyListener(kAudioHardwarePropertySleepingIsAllowed, HardwareListenerProc, self));
verify_noerr (AudioHardwareAddPropertyListener(kAudioHardwarePropertyUnloadingIsAllowed, HardwareListenerProc, self));
__Verify_noErr (AudioHardwareAddPropertyListener(kAudioHardwarePropertyIsInitingOrExiting, HardwareListenerProc, self));
__Verify_noErr (AudioHardwareAddPropertyListener(kAudioHardwarePropertySleepingIsAllowed, HardwareListenerProc, self));
__Verify_noErr (AudioHardwareAddPropertyListener(kAudioHardwarePropertyUnloadingIsAllowed, HardwareListenerProc, self));

/* UInt32 val, size = sizeof(UInt32);
AudioHardwareGetProperty(kAudioHardwarePropertySleepingIsAllowed, &size, &val);
Expand All @@ -514,18 +514,18 @@ - (void)RemoveListeners
int index = 0;
for (AudioDeviceList::DeviceList::iterator i = thelist.begin(); i != thelist.end(); ++i, ++index) {
if (0 == strncmp("Soundflower", (*i).mName, strlen("Soundflower"))) {
verify_noerr (AudioDeviceRemovePropertyListener((*i).mID, 0, true, kAudioDevicePropertyNominalSampleRate, DeviceListenerProc));
verify_noerr (AudioDeviceRemovePropertyListener((*i).mID, 0, true, kAudioDevicePropertyStreamConfiguration, DeviceListenerProc));
__Verify_noErr (AudioDeviceRemovePropertyListener((*i).mID, 0, true, kAudioDevicePropertyNominalSampleRate, DeviceListenerProc));
__Verify_noErr (AudioDeviceRemovePropertyListener((*i).mID, 0, true, kAudioDevicePropertyStreamConfiguration, DeviceListenerProc));
}
else {
verify_noerr (AudioDeviceRemovePropertyListener((*i).mID, 0, false, kAudioDevicePropertyNominalSampleRate, DeviceListenerProc));
verify_noerr (AudioDeviceRemovePropertyListener((*i).mID, 0, false, kAudioDevicePropertyStreamConfiguration, DeviceListenerProc));
verify_noerr (AudioDeviceRemovePropertyListener((*i).mID, 0, false, kAudioDevicePropertyStreams, DeviceListenerProc));
verify_noerr (AudioDeviceRemovePropertyListener((*i).mID, 0, false, kAudioDevicePropertyDataSource, DeviceListenerProc));
__Verify_noErr (AudioDeviceRemovePropertyListener((*i).mID, 0, false, kAudioDevicePropertyNominalSampleRate, DeviceListenerProc));
__Verify_noErr (AudioDeviceRemovePropertyListener((*i).mID, 0, false, kAudioDevicePropertyStreamConfiguration, DeviceListenerProc));
__Verify_noErr (AudioDeviceRemovePropertyListener((*i).mID, 0, false, kAudioDevicePropertyStreams, DeviceListenerProc));
__Verify_noErr (AudioDeviceRemovePropertyListener((*i).mID, 0, false, kAudioDevicePropertyDataSource, DeviceListenerProc));
}
}

verify_noerr (AudioHardwareRemovePropertyListener(kAudioHardwarePropertyDevices, HardwareListenerProc));
__Verify_noErr (AudioHardwareRemovePropertyListener(kAudioHardwarePropertyDevices, HardwareListenerProc));
}

- (id)init
Expand Down
28 changes: 14 additions & 14 deletions SoundflowerBed/AudioDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,27 +51,27 @@ void AudioDevice::Init(AudioDeviceID devid, bool isInput)
UInt32 propsize;

propsize = sizeof(UInt32);
verify_noerr(AudioDeviceGetProperty(mID, 0, mIsInput, kAudioDevicePropertySafetyOffset, &propsize, &mSafetyOffset));
__Verify_noErr(AudioDeviceGetProperty(mID, 0, mIsInput, kAudioDevicePropertySafetyOffset, &propsize, &mSafetyOffset));

propsize = sizeof(UInt32);
verify_noerr(AudioDeviceGetProperty(mID, 0, mIsInput, kAudioDevicePropertyBufferFrameSize, &propsize, &mBufferSizeFrames));
__Verify_noErr(AudioDeviceGetProperty(mID, 0, mIsInput, kAudioDevicePropertyBufferFrameSize, &propsize, &mBufferSizeFrames));

UpdateFormat();
}

void AudioDevice::UpdateFormat()
{
UInt32 propsize = sizeof(AudioStreamBasicDescription);
verify_noerr(AudioDeviceGetProperty(mID, 0, mIsInput, kAudioDevicePropertyStreamFormat, &propsize, &mFormat));
__Verify_noErr(AudioDeviceGetProperty(mID, 0, mIsInput, kAudioDevicePropertyStreamFormat, &propsize, &mFormat));
}

void AudioDevice::SetBufferSize(UInt32 size)
{
UInt32 propsize = sizeof(UInt32);
verify_noerr(AudioDeviceSetProperty(mID, NULL, 0, mIsInput, kAudioDevicePropertyBufferFrameSize, propsize, &size));
__Verify_noErr(AudioDeviceSetProperty(mID, NULL, 0, mIsInput, kAudioDevicePropertyBufferFrameSize, propsize, &size));

propsize = sizeof(UInt32);
verify_noerr(AudioDeviceGetProperty(mID, 0, mIsInput, kAudioDevicePropertyBufferFrameSize, &propsize, &mBufferSizeFrames));
__Verify_noErr(AudioDeviceGetProperty(mID, 0, mIsInput, kAudioDevicePropertyBufferFrameSize, &propsize, &mBufferSizeFrames));
}

OSStatus AudioDevice::SetSampleRate(Float64 sr)
Expand All @@ -94,14 +94,14 @@ bool AudioDevice::IsVolumeAvailableForMaster()
{
//Assume all device which support getting Volume also support setting Volume.
Boolean isWritable = false;
verify_noerr(AudioDeviceGetPropertyInfo(mID,0,false,kAudioDevicePropertyVolumeScalar,NULL,&isWritable));
__Verify_noErr(AudioDeviceGetPropertyInfo(mID,0,false,kAudioDevicePropertyVolumeScalar,NULL,&isWritable));
return isWritable;
}

bool AudioDevice::IsVolumeAvailableForChannels()
{
Boolean isWritable = false;
verify_noerr(AudioDeviceGetPropertyInfo(mID,1,false,kAudioDevicePropertyVolumeScalar,NULL,&isWritable));
__Verify_noErr(AudioDeviceGetPropertyInfo(mID,1,false,kAudioDevicePropertyVolumeScalar,NULL,&isWritable));
return isWritable;
}

Expand All @@ -119,12 +119,12 @@ void AudioDevice::SetVolumeScalar(float val)

if(IsVolumeAvailableForMaster())
{
verify_noerr(AudioDeviceSetProperty(mID, NULL, 0/*master channel*/, false, kAudioDevicePropertyVolumeScalar, propSize, &volumeScalar));
__Verify_noErr(AudioDeviceSetProperty(mID, NULL, 0/*master channel*/, false, kAudioDevicePropertyVolumeScalar, propSize, &volumeScalar));
}else if(IsVolumeAvailableForChannels())
{
int channel_num = this->CountChannels();
for (int i = 0 ; i < channel_num; i++){
verify_noerr(AudioDeviceSetProperty(mID, NULL, 1 + i, false, kAudioDevicePropertyVolumeScalar, propSize, &volumeScalar));
__Verify_noErr(AudioDeviceSetProperty(mID, NULL, 1 + i, false, kAudioDevicePropertyVolumeScalar, propSize, &volumeScalar));
}
}else{
//No Support for kAudioDevicePropertyVolumeScalar
Expand All @@ -138,11 +138,11 @@ float AudioDevice::GetVolumeScalar()

if(IsVolumeAvailableForMaster())
{
verify_noerr(AudioDeviceGetProperty(mID, 0/*master channel*/, false, kAudioDevicePropertyVolumeScalar, &propSize, &volumeScalar));
__Verify_noErr(AudioDeviceGetProperty(mID, 0/*master channel*/, false, kAudioDevicePropertyVolumeScalar, &propSize, &volumeScalar));
}else if(IsVolumeAvailableForChannels())
{
//we take value from channel 1
verify_noerr(AudioDeviceGetProperty(mID, 1, false, kAudioDevicePropertyVolumeScalar, &propSize, &volumeScalar));
__Verify_noErr(AudioDeviceGetProperty(mID, 1, false, kAudioDevicePropertyVolumeScalar, &propSize, &volumeScalar));

}else{
//No Support for kAudioDevicePropertyVolumeScalar
Expand All @@ -157,11 +157,11 @@ float AudioDevice::GetVolumeDB()

if(IsVolumeAvailableForMaster())
{
verify_noerr(AudioDeviceGetProperty(mID, 0/*master channel*/, false, kAudioDevicePropertyVolumeDecibels, &propSize, &volumeDB));
__Verify_noErr(AudioDeviceGetProperty(mID, 0/*master channel*/, false, kAudioDevicePropertyVolumeDecibels, &propSize, &volumeDB));
}else if(IsVolumeAvailableForChannels())
{
//we take value from channel 1
verify_noerr(AudioDeviceGetProperty(mID, 1, false, kAudioDevicePropertyVolumeDecibels, &propSize, &volumeDB));
__Verify_noErr(AudioDeviceGetProperty(mID, 1, false, kAudioDevicePropertyVolumeDecibels, &propSize, &volumeDB));

}else{
//No Support for kAudioDevicePropertyVolumeDecibels
Expand Down Expand Up @@ -191,6 +191,6 @@ int AudioDevice::CountChannels()

char * AudioDevice::GetName(char *buf, UInt32 maxlen)
{
verify_noerr(AudioDeviceGetProperty(mID, 0, mIsInput, kAudioDevicePropertyDeviceName, &maxlen, buf));
__Verify_noErr(AudioDeviceGetProperty(mID, 0, mIsInput, kAudioDevicePropertyDeviceName, &maxlen, buf));
return buf;
}
6 changes: 3 additions & 3 deletions SoundflowerBed/AudioDeviceList.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@ void AudioDeviceList::BuildList()

UInt32 propsize;

verify_noerr(AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &propsize, NULL));
__Verify_noErr(AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &propsize, NULL));
int nDevices = propsize / sizeof(AudioDeviceID);
AudioDeviceID *devids = new AudioDeviceID[nDevices];
verify_noerr(AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &propsize, devids));
__Verify_noErr(AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &propsize, devids));

verify_noerr(1 == 0);
__Verify_noErr(1 == 0);
for (int i = 0; i < nDevices; ++i) {
AudioDevice dev(devids[i], mInputs);
//if (dev.CountChannels() > 0)
Expand Down
28 changes: 14 additions & 14 deletions SoundflowerBed/AudioThruEngine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -190,31 +190,31 @@ void AudioThruEngine::Start()

#if USE_AUDIODEVICEREAD
UInt32 streamListSize;
verify_noerr (AudioDeviceGetPropertyInfo(gInputDevice, 0, true, kAudioDevicePropertyStreams, &streamListSize, NULL));
__Verify_noErr (AudioDeviceGetPropertyInfo(gInputDevice, 0, true, kAudioDevicePropertyStreams, &streamListSize, NULL));
UInt32 nInputStreams = streamListSize / sizeof(AudioStreamID);

propsize = offsetof(AudioBufferList, mBuffers[nInputStreams]);
gInputIOBuffer = (AudioBufferList *)malloc(propsize);
verify_noerr (AudioDeviceGetProperty(gInputDevice, 0, true, kAudioDevicePropertyStreamConfiguration, &propsize, gInputIOBuffer));
__Verify_noErr (AudioDeviceGetProperty(gInputDevice, 0, true, kAudioDevicePropertyStreamConfiguration, &propsize, gInputIOBuffer));
gInputIOBuffer->mBuffers[0].mData = malloc(gInputIOBuffer->mBuffers[0].mDataByteSize);

verify_noerr (AudioDeviceSetProperty(gInputDevice, NULL, 0, true, kAudioDevicePropertyRegisterBufferList, propsize, gInputIOBuffer));
__Verify_noErr (AudioDeviceSetProperty(gInputDevice, NULL, 0, true, kAudioDevicePropertyRegisterBufferList, propsize, gInputIOBuffer));
#endif

mInputProcState = kStarting;
mOutputProcState = kStarting;

verify_noerr (AudioDeviceAddIOProc(mInputDevice.mID, InputIOProc, this));
verify_noerr (AudioDeviceStart(mInputDevice.mID, InputIOProc));
__Verify_noErr (AudioDeviceAddIOProc(mInputDevice.mID, InputIOProc, this));
__Verify_noErr (AudioDeviceStart(mInputDevice.mID, InputIOProc));

if (mInputDevice.CountChannels() == 2)
mOutputIOProc = OutputIOProc;
else
mOutputIOProc = OutputIOProc16;


verify_noerr (AudioDeviceAddIOProc(mOutputDevice.mID, mOutputIOProc, this));
verify_noerr (AudioDeviceStart(mOutputDevice.mID, mOutputIOProc));
__Verify_noErr (AudioDeviceAddIOProc(mOutputDevice.mID, mOutputIOProc, this));
__Verify_noErr (AudioDeviceStart(mOutputDevice.mID, mOutputIOProc));

// UInt32 propsize = sizeof(UInt32);
// UInt32 isAlreadyRunning;
Expand All @@ -232,11 +232,11 @@ void AudioThruEngine::Start()
mRunning = false;
printf("give up to start.\n");

verify_noerr (AudioDeviceStop(mInputDevice.mID, InputIOProc));
verify_noerr (AudioDeviceRemoveIOProc(mInputDevice.mID, InputIOProc));
__Verify_noErr (AudioDeviceStop(mInputDevice.mID, InputIOProc));
__Verify_noErr (AudioDeviceRemoveIOProc(mInputDevice.mID, InputIOProc));

verify_noerr (AudioDeviceStop(mOutputDevice.mID, mOutputIOProc));
verify_noerr (AudioDeviceRemoveIOProc(mOutputDevice.mID, mOutputIOProc));
__Verify_noErr (AudioDeviceStop(mOutputDevice.mID, mOutputIOProc));
__Verify_noErr (AudioDeviceRemoveIOProc(mOutputDevice.mID, mOutputIOProc));

mInputProcState = kOff;
mOutputProcState = kOff;
Expand Down Expand Up @@ -266,8 +266,8 @@ void AudioThruEngine::ComputeThruOffset()
return;
}
// AudioTimeStamp inputTime, outputTime;
// verify_noerr (AudioDeviceGetCurrentTime(mInputDevice.mID, &inputTime));
// verify_noerr (AudioDeviceGetCurrentTime(mOutputDevice.mID, &outputTime));
// __Verify_noErr (AudioDeviceGetCurrentTime(mInputDevice.mID, &inputTime));
// __Verify_noErr (AudioDeviceGetCurrentTime(mOutputDevice.mID, &outputTime));

// printf(" in host: %20.0f samples: %20.f safety: %7ld buffer: %4ld\n", Float64(inputTime.mHostTime), inputTime.mSampleTime,
// mInputDevice.mSafetyOffset, mInputDevice.mBufferSizeFrames);
Expand Down Expand Up @@ -440,7 +440,7 @@ OSStatus AudioThruEngine::OutputIOProc ( AudioDeviceID inDevice,
readTime.mFlags = kAudioTimeStampSampleTimeValid;
readTime.mSampleTime = inNow->mSampleTime - gInputSafetyOffset - gOutputSampleCount;

verify_noerr(AudioDeviceRead(gInputDevice.mID, &readTime, gInputIOBuffer));
__Verify_noErr(AudioDeviceRead(gInputDevice.mID, &readTime, gInputIOBuffer));
memcpy(outOutputData->mBuffers[0].mData, gInputIOBuffer->mBuffers[0].mData, outOutputData->mBuffers[0].mDataByteSize);
#endif
} else
Expand Down
2 changes: 1 addition & 1 deletion SoundflowerBed/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<key>CFBundleIconFile</key>
<string>appIcon.icns</string>
<key>CFBundleIdentifier</key>
<string>com.cycling74.Soundflowerbed</string>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
Expand Down
Loading