AVAssetWriter finishWriting fails on iOS 6 Simulator - ios

It seems that finishWriting is broken on iOS 6 simulator - it hangs forever. It's now deprecated and replaced by the new finishWritingWithCompletionHandler: - which also never calls the handler.
On real devices running iOS 6, this works just fine as it always did. Also in previous iOS simulators it works just fine. Seems like a bug in iOS 6 simulator.
Anyone else experiencing this or can prove me wrong?

I had this issue as well, then realized that I wasn't calling endSessionAtSourceTime: after starting one. This resolved my issue.

Ok found a work around on Simulator.
Looks like stop deadlocks the video processing thread so a workaround is to call stop in the main thread instead:
// in iOS6 Simulator this blocks the video processing thread call back in UI thread.
// BOOL stop = [assetWriter finishWriting];
[self performSelectorOnMainThread:#selector(stopInOtherThread) withObject:nil];
-(void)stopInOtherThread{
//Stop doesn't block in MainThread
BOOL stop = [assetWriter finishWriting];
NSLog(#" assetWriter finishWriting :%d",stop);
}
This workaround doesn't seem to work for finishWritingWithCompletionHandler
I'll try and see if I can raise a bug on Apple.

Related

SIGABRT in [RCTContextExecutor dealloc] every reload

I'm new to React Native.
I follow this official facebook tutorial, and every time I change the code in the index.ios.js a SIGABRT exception araise in RCTContextExecutor.m at the dealloc method:
- (void)dealloc
{
[self invalidate];
}
And the update can perform. Can anyone help how to handle this case?
Thanks in advance.
Found how to solve the stopping on XCODE issue (but not the reason which is good enough):
Run the react-native
If run on simulator press cmd+D
If run on real device, shake the device
Press Stop Profiling

iOS 7 UIWebView not rendering

I'm porting my app to iOS 7 and I have a problem with UIWebView in iOS 7.
I load local html string in it with this code:
NSURL *baseURL = [NSURL fileURLWithPath: DOCUMENTS_DIRECTORY];
[self.descWebView loadHTMLString:html baseURL:baseURL];
It works perfectly on iOS 6 and prior but on iOS 7 it doesn't rendering and the UIWebView is still white. And this message appears in console:
void SendDelegateMessage(NSInvocation *): delegate
(webView:decidePolicyForNavigationAction:request:frame:decisionListener:)
failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode
Thanks for your replies.
As mentioned by #zaplitny, I had to update Crittercism to the latest version (4.1.0) for this problem to go away.
There was a problem with older version of the Crittercism library which caused this. As others have alluded to in comments, this bug was fixed in the 4.3.1 version of the Crittercism SDK.
https://app.crittercism.com/downloads/release_notes/ios/4.3.1 :
fix: Workaround for apps experiencing UIWebViews failing to load data
on first launch when running on iOS 7. This only occurs in apps that
subclass UIWebView, and Crittercism has filed a bug report with Apple.
Note - Be aware that while your application may not directly subclass
UIWebView, this is done in many common 3rd party libraries such as the
Google AdMob and Millenial Media SDKs.
For those of us who updated Crittercism to the version 4.1.2 hoping that it would solve the issue but it didn't. I can offer quite an ugly but simple solution: create and initialize UIWebView before calling [Crittercism enableWithAppID:#"***...***"];
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
...
UIWebView* fakeWebView = [[[UIWebView alloc] initWithFrame:CGRectMake(-1, -1, 1, 1)] autorelease];
[fakeWebView loadHTMLString:#"<!DOCTYPE HTML><html><body>I need Crittercism</body></html>" baseURL:nil];
[mainViewController.view addSubview:fakeWebView];
[Crittercism enableWithAppID:#"***...***"];
...
}
This trick allowed me not only to get rid of a described problem, but also slightly speed up the first initialization of a real UIWebView.
I had this error appearing trying to display admob ads, when ever crittercism was enabled I would get that error in the logs, incidentally the ads were not displaying either.
To fix it, I disabled crittercism instrumentation, this might not be an option for everyone.
[Crittercism enableWithAppID:#"your_app_id" andDelegate:nil andURLFilters:nil disableInstrumentation:YES];
If not simply creating a webview (You don't need to add it as a subview) as suggested by others seems to work for me as well.
[[UIWebView alloc] initWithFrame:CGRectMake(-1, -1, 1, 1)]
[Crittercism enableWithAppID:#"your_app_id"];
Try product --> clean. It can't hurt. When you run an app it will only replace/compile the files that changed. Some times the xCode bugs up and doesn't compile a changed file. Product clean deletes old versions of the compiled code so next time you build it will have been all from the last compile. Again you have nothing to lose by doing it.
I am seeing the same problem you are. I have tried:
moving the load request from the viewDidLoad to the viewWillAppear and viewDidAppear, this did not help anything
tried reloading the webview after the load request was made. still nothing
tried changing the URL creation from URLWithString to fileURLWithPath and still nothing
What is even more strange is that none of the delegate methods fire when the page doesnt load. it is almost as if the web view doesnt even attempt to load the page. Yet, like you said, if you close the app from the multitask view and reopen it, everything works fine.
were you able to figure out a way around this or found a solution?
I had similar issues with my PhoneGap application on IOS7, i had to Redraw the UI of the page on "viewDidAppear" or "Pageshow" using the below code and this worked for me.
$(".cls_div_page_content").redraw();
jQuery.fn.redraw = function() {
return this.hide(0, function(){$(this).show()});
};
many times this error can come in case u are using something that is not available in that particular iOS version..
for example
NSString *test=#"test this";
[test containsString:#"test"];
use of containsString in iOS 7.1 will give you the same following error, but it will work fine in iOS 8.0,
void SendDelegateMessage(NSInvocation *): delegate (webView:decidePolicyForNavigationAction:request:frame:decisionListener:)
failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode
I ran into this issue too. It seems the problem is caused when certain 3rd party libraries are linked, but I am not even sure exactly which one was responsible in my case. I didn't have Crittercism in my app.
What fixed it for me was the suggestion I found here on Apple's Dev Forum to instantiate a UIWebView early.
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// In a severe case of WTF: some 3rd party libs (exact culprit unknown) can cause webviews to stop
// showing anything on iOS 7, and instead have console warnings every 10 seconds that look like:
// void SendDelegateMessage(NSInvocation *): delegate (webView:decidePolicyForNavigationAction:request:frame:decisionListener:) failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode
// Just instantiating an UIWebView before any of the 3rd party libs kick in is enough to fix it.
// Don't know why, but it works.
if (SYSTEM_VERSION_LESS_THAN(#"8.0")) {
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
webView.delegate = nil; // Do something with webView to silence warning
}
return YES;
}
For those who are using Parse SDK with the 1.6.x version under iOS7/iOS8 and subclass UIWebView, same problem will appear if you are using PFInstallation saveInBackground method.
Solution is to delay call saveInBackground, e.g.:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3.f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[currentInstallation saveInBackground];
});

GPUImageMovieWriter - crashing with "Cannot call method when status is 2"

Trying to get started with the really great GPUImage framework so graciously shared by Brad Larson, but having an issue.
When running the SimpleVideoFileFilter sample it always crashes at completion with the following error:
[AVAssetWriterInput markAsFinished] Cannot call method when status is 2
Anyone know how to correct this?
Also do not see the video when run in simulator, does it not work for simulator?
Running iOS 6.1 and Xcode 4.6
Thanks!
I am noticing that finishRecordingWithCompletionHandler is being called twice, it crashes on second call

Release AVAudioPlayer in iOS4/iOS5 giving EXC_BAD_ACCESS error

EDIT: Updated my device (and deployment target) from iOS 4.3.5 to iOS 5.1.1 and still has the same issue
Having a problem releasing a class member AVAudioPlayer to play another sound after playing a sound.
This only seems to be a problem on one of my devices, a 3rd generation iPod Touch running iOS 4.3.5/5.1.1.
My 4th and 5th generation devices running iOS 6 run just fine.
[audio release];
audio = nil;
#try
{
audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
if ((audio != nil) && (!error))
{
audio.delegate = (id)self;
audio.volume = gVolume/10;
[audio play];
}
else
{
[audio release];
audio = nil;
}
}
#catch (NSException *exception)
{
[audio release];
audio = nil;
}
First time through it plays just fine, but when this code executes a second time to play another sound, it gives an EXC_BAD_ACCESS error, which does not happen on my 4th/5th generation devices.
I purposely delay the release until I need to play another sound in order to give the play time to perform.
Tried working with AVAudioPlayerDelegate but that didn't solve the problem, nor does calling:
[audio prepareToPlay];
I do initialize audio to nil in viewDidLoad, and clean up in viewDidUnload and dealloc.
Was having a lot of memory leak issues but this version of the code seemed to have solved that.
Thanks to the comment above, and the failure of all my other ideas, I went ahead and took advantage of ARC.
I didn't want to refactor my entire project to start using ARC, so I rewrote a new class to handle all of my audio needs and set some compiler flags (-fobjc-arc) to enable ARC just for that file.
Not exactly sure what I was doing wrong before, but the system seems to be much better at managing memory than I am, and I'm happy to let it solve all my problems.
EDIT 2:
Apparently Apple did finally fix their memory leak so I went back to my ARC solution which works fine for both iOS 5 and iOS 6.
EDIT:
I may have been a little premature.
While implementing ARC for this was helpful in general, this specific problem goes deeper.
Apparently, there is a leak in Core Foundation for iOS 6.
Leak from NSURL and AVAudioPlayer using ARC
Memory Leak - NSString & NSURL
Using ARC, it works fine on my Gen 3 iOS 5 device, but leaks significantly for Gen 4/5 iOS 6.
Without ARC, Gen 4/5 iOS 6 works fine, but Gen 3 iOS 5 crashes.
I ended up making two versions of my new class, one using ARC and one not, and checking the system version at runtime [[UIDevice currentDevice] systemVersion] to determine which version to use.
It may be a little clumsy, but does allow me to support the Gen 3 devices. If Apple ever fixes their problem I can return to a single version at that time.

Grand Central Dispatch EXC_BAD_ACCESS Exception

I have an empty block which runs fine in iPhone 6.0 simulator in Xcode, however when I switch to the iPhone 5.1 simulator I get the following exception: "EXC_BAD_ACCESS".
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// I've removed all code from here and exception still occurs.
});
Any ideas what causes this? The exception is thrown at the dispatch_async line. Not sure if it matters, though I am using ARC.
Mistake on my part, I had the iOS Deployment Target set at 6.0. I've updated it to 5.1 now and it works fine.

Resources