I've reached the stage where it's time to start tracking down memory leaks and, to my dismay, Instruments is giving me very little to go on (other than the fact that I definitely have leaks). My stack trace contains no information other than memory addresses.
Since I'm working on a new project and I've transitioned to version 3.2.1 of Xcode in tandem, I'm not sure if it's my program configuration or Xcode that's causing the problem. I have found one reference to the issue coupled with a post on the dyld leak that seems to be prevalent with the 3.2.1 release.
Since I haven't been able to find much on the problem I'm guessing it's something I've created rather than a systematic issue with Xcode. If someone has any idea where I might have thrown a wrench in the works, I would love some pointers. Also, if someone could just verify that the stack trace is indeed functioning properly in 3.2.1 that would be useful as well.
Are you trying to run Instruments with a Release build of your app? If so, you might be stripping symbols so Instruments can't find them. Check that you're using a Debug build.
Based on irsk's suggestion, I did a little searching and this appears to be an ongoing issue with symbolicatecrash. I came across a post mentioning that another user was having problems with 3.0 debug builds exhibiting the behavior, but 3.1 was working fine (I've been using 3.0 debug).
So I did a little testing:
Simulator - 3.0 | Debug (address space only in Instrument, i.e. no symbolic linking)
Simulator - 3.1 | Debug (Instruments fully functional)
Simulator - 3.1.2 | Debug (Instruments fully functional)
It would appear the work around is to avoid 3.0 builds in Instruments.
Related
I started using Xamarin.UITest for cross-platform testing (IOS & Android).
With Android it worked instantly without any problem and it keeps forking even after any SDK update or JDK.. name it!
But for iOS there was so many issue encountered with the device agent that didn't want to start, the wrong Xcode commande one, the wrong Xcode. Some time it worked, but out of no where it crashes.. then you must clean, rebuild, retry, cross your fingers it doesn't crash or at least that it will launch..
But now April 19 2019, I had an iOS update, combine with an Xcode update and sadly, it doesn't work anymore. I made a lot of research and attempt to recover my test case:
Downgrade Xcode to 10.1
Downgrade Xcode commande line tool to 10.1
downgraded the OS!
To finally rethink it. It's not a good solid testing tool if it breaks at every updates.
On the AppCenter it still works for both platform. But to create your test, you have to run them locally.. You can't anymore with iOS and if you find how to make it work, let me tell you : "See you for the next update!"
So the question is:
What are the alternative to do some automated UI test for iOS & Android using Xamarin?
Xamarin.UITest Xcode 10.2 support
Sorry to hear about your difficulty with the Xcode update.
Unfortunately Xcode minor updates for the last several releases have tended to break local iOS simulator testing, and occasionally device testing. I've seen this be an issue since at least as early as Xcode 9.x versions.
For context, Xcode 10.2 support was added in this package: https://www.nuget.org/packages/Xamarin.UITest/2.2.7.2002-dev
If you or future readers of this discussion still do end up using Xamarin.UITest, I recommend checking the release notes when new minor versions of Xcode come out to see if that support has been confirmed. Typically the support has been added in the 1st Xamarin.UITest package released after a new minor version of Xcode has been released.
(I generally haven't seen this issue with patch versions though, for example Xcode 10.2.1 didn't seem to cause any issues when it came out if it was run against a test suite that was working for Xcode 10.2)
Other testing frameworks
As for other testing frameworks, if you're using App Center itself; then Appium (JUnit) or Calabash are both able to be used with App Center Test and can be used cross-platform to run against your IPA/APK, generally regardless of what was used to write the apps in the first place, like Xamarin.UITest. (Though each framework has slightly different set up requirements and limitations.)
Outside of App Center Test, there may be other testing frameworks you can use; but that gets more into individual developer opinion which strictly speaking is out-of-scope for Stack Overflow answers.
Appium Studio which holds all the pros of native Appium. It also supports parallel execution with built-in test reporting mechanism. They also provide cloud devices with which you can check whether it is feasible for your project. Check out their documentation for more features.
I'm trying to debug some CPU issues caused by a .NET 4.6 MVC5 application by analyzing a dump created by DebugDiag 2.1.0.7. I'm finding even after loading custom .pdb symbols I'm still not getting stacktrack information in the generated report:
The error that the report displays is
Type: Microsoft.Diagnostics.Runtime.ClrDiagnosticsException
Message: This runtime is not initialized and contains no data.
I note that DebugDiag version 1.2 didn't support .NET 4.0+. Could DebugDiag 2.1 perhaps not support .NET 4.6?
My CPU issues came down to a third-party piece of software that I was initialising in the wrong place. It needed to be initialised in Application_Start() and instead I was doing it in Application_BeginRequest(). Whoops! If you're experiencing this, and are scrambling around trying to debug issues in your production app like I was, make sure you check out the Global.asax for anything like this.
I'm guessing that the StackTrace issues with DebugDiag were related to where in the application lifecycle that the code causing the CPU problem was occurring.
I'm interested in learning OpenGL, so I started reading the book 3D programming for iPhone by O'Reilly. And guess what, I got stuck at the first exercise.
Even though I followed the guidelines, my Xcode application won't allow me to use the _OES suffix in the functions glGenFramebuffers and glGenRenderbuffers.
I did some research, and it appears that this is related to the 2.0 version.
However, I did in fact add both:
#import <OpenGLES/Es1/gl.h>
#import <OpenGLES/ES2/glext.h>
and the added OpenGL framework also includes the header files for both ES 1 and 2.
So I did some more research, and downloaded the project that I found in this thread:
Example from Chapter 1 of iphone 3D programming book not drawing to screen.
When I run it in my Xcode, it works.
I don't see any difference between our projects, so why does the _OES suffix in fact work for him and not for me while using the same version of Xcode? I even copy - pasted his code into my own project, but my Xcode project won't allow it.
Well, I don't get bugs either by just leaving out the _OES suffix, but I only get a black screen when running the app so it must mean something is wrong.
As a second problem is also that I get a lot of linker errors when I try to run the app on the iPhone simulator; I don't get these errors when I try it on my iPad. And I don't get these linker errors on my simulator when I use the downloaded project; it works for both the simulator and my iPad.
I'm terribly confused, has someone an idea what could be the cause of all this?
I'd like to continue, but I'm stuck :-) Thank you very much for your attention and help!
Starting with the next version of Mac OS X, Java will no longer be included in the system and I don't want to force my customers to install it themselves. So I would like to do what I do on Windows - bundle it with my app. It also gives me some hope that it could get included in the Mac App Store.
Where can I download a Mac OS X JRE that I could include with my application? Or can I just copy the one that's installed on my Mac?
Update (4/15/2013):
As Thorbjørn helpfully pointed out, Oracle now has a solution for this. See http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html. However, I'm keeping the original content for "historical purposes", and because it was a fun research project.
Previous version (with edits):
This is a great question. I was going to respond that you are simply ahead of your time -- as you pointed out, Java is not going to be removed until the Lion release. However, this article makes it clear that using Java today is not allowed:
Apps that use deprecated or optionally installed technologies (e.g., Java, [PowerPC code requiring] Rosetta) will be rejected.
At the same time, no one has announced a redistributable JRE for Mac OS X yet. I think your best bet, bearing in mind that you are forging new ground, is to check out the Mac OS X Port wiki page of the OpenJDK project. It does describe how to compile your own JDK, but it does not clearly state whether or not the resulting JDK can be "bundled" cleanly or not. I think you will have to try it and see :-(.
Also, it's not clear if the OpenJDK licensing allows this at all (IANAL). Hopefully someone else has already figured this out with regard to Linux/Windows, although of course the rules may be different for the Apple contributions.
Hope this helps. If nothing else, it's a starting point.
EDIT: I am going to throw out one additional suggestion. We now know that Mono apps can be packaged for the App Store. Furthermore, IKVM.NET is a complete implementation of Java that runs on top of Mono. You could try, in theory, to put these two pieces together and get a Java app, bundled for the App Store, that does not in fact require a JRE!
If you try this, I would love to hear how it works out :-).
EDIT 2: Unfortunately, the App Store and the GPL do not appear to be compatible (see http://www.zdnet.com/blog/open-source/no-gpl-apps-for-apples-app-store/8046). The OpenJDK license isn't exactly the same as the GPL, but it's pretty close (again, IANAL). Therefore, Mono & IKVM.NET may be your best bet. Good luck!
In the same web search that I found this question, I've found the these instructions from the OpenJDK project. Not having tried them myself, I cannot comment on how well they work.
Meanwhile, another, very detailled article was published by Marco Dinacci which also goes into signing and sandboxing.
Apple has joined the Sun/Oracle OpenJDK open source project last month, so Java on Apple is alive and kicking.
Just tell the user to download and install the OpenJDK JRE for Mac OSX (when it becomes available, right now it´s just source code).
And no. you cannot include "the folder that is in your mac" without permission as it is copyrighted code from Apple.
Finally, packaging a "private JRE" is a very bad practice, it will make your app bloated, andif the user ends up running several Java apps, he will end up running multiple Java VMs simultaneously which is a terrible waste of system resources.
I am trying to find memory leaks from my Xcode project. I don't know, what happened - I can't select anything from Run->Run with performance tool - the list of things are disabled.
Please help me, I am a beginner.
The problem was i have deleted the build folder and was trying to run with performance tool, without building the code again, if you need to test your app with performance tool, you must compiled your code, and you need to have build folder in your project.
I believe you are building an iOS program. As said by Apple engineers, most items under Run with Performance Tool need dTrace support, but dTrace is not available for iOS yet, not even for simulators.