I can't get NSLogger successfully intergrated to my app - ios

I can't get NSLogger working in my iOS project, or even in a new empty project.
I was in need of some logging frameworks, and I chose NSLogger after some comparison because its desktop viewer is exactly what I need.
I use CocoaPod in my project, so the installation is quite simple. Just add one line in the Podfile and running 'pod update' in the console will do.
I followed the instructions in NSLogger wiki to configure:
First, add LoggerStartForBuildUser() into the main() function;
Second, replace NSLog() with LogMessageCompact() in my code.
And then I build my project and run it on my iPhone 6 plus(with 8.2 system).
My app works fine but I have no log in the console, not a word!
I setup a few break points and make sure the right logging code did execute.
But still nothing happened as if NSLogger never exists.
I created a brand new empty app project and done the same installation procedure, but still no log was shown.
I really wanna know if I missed anything. Anyone who had come across similar problem like mine?
PS:My development environment is Yosemite + Xcode 6.2

Problem solved.
It turns out that the NSLogger cannot connect to the desktop viewer. I had to use LoggerSetViewerHost(NULL,hostname,port) instead of LoggerStartForBuildUser().And It works like a charm.
But every time I restart the desktop viewer, the port will change. So I had to change the port in my code and re-compile. That's a little annoying.
And by default, NSLogger would redirect all the NSLog() to its log buffer. So it's normal to see nothing in the console, unless you use LoggerSetOptions(kLoggerOption_LogToConsole) to force NSLogger to copy all the logs into the console.

Related

Angular dart on WebStorm. Debug is no more working

It is a week now that I have problems debugging angular dart applications in WebStorm. If I use debug on a console (server) application everything works fine.
I tried to roll back to angular 4.0.0 (on dart 1.24.3), but this didn't help.
I really don't know what kind of info could be useful.
Please, let me know if there is some configuration file that I can print or that could be important in order to fix the problem. I tested a lot of configurations, but, at present, I'm not able to work properly. After filling up my code with print statements, there are some cases where also this practice is not enough.
Edit1:
I have tried to create a sample project. With no DDc and target chrome, the debugger stops but not on all breakpoints. With no DDc and target Dartium, it does not stop.
Edit 2:
I was running my application with target dartium, because with target chrome I had an annoying error that I was not able to catch. Now I got it, and running the project with target chrome, revives the debugger. This is a good new. Just a question, is a problem of release 1.24.3 (Dartium has not been released for this release) or something else? Anyway, if this is a known problem, it wouldn't be better to disable the target dartium on WebStorm when the release is 1.24.3?
Edit 3:
Now the debugger is working, but only on the project you are developing. The imported packages are not stopping on breakpoints. As my project is divided in a lot of packages, I cannot debug approximately 80% of my code.
Am I doing something wrong?
What you are hitting here isn't functionality directly in an Angular Dart or Dart issue, but in the JS Debugger in WebStorm.
Open an issue on YouTrack here: https://youtrack.jetbrains.com/issues
Include not only the version of Angular and the Dart SDK, but also the version of WebStorm, and an example of where breakpoints are not working.
Finally, there is some information in this issue that might help: https://youtrack.jetbrains.com/issue/WEB-30593

Cannot run program in Xcode

I've recently made an app and could successfully run and test it until this suddenly happened,
fail to run program
It doesn't looks like an issue, but the "run" button is unavailable. Usually it should look something like,
successfully run a program
As in the image, first there are two buttons, run and stop, after that there is the name of the program/app and its icon (fun facts) and then the iphone simulator it will run on (iphone 6). On the image on top, the failed to run program attempt, it is totally different, first the run button is disabled, second, the icon is a gear and not the app icon, and third, there is no simulator, it appears "my mac".
I don't know why this happened but this cannot let me run the app. I searched in the apple documentation and didn't found anything. If someone knows how to solve this please tell me.
The simplest solution is to rebuild your project from scratch. This is not difficult because you still have all your code. So, start with a new project from the iOS template. Copy your code from the old project into the new project.
And try to avoid renaming your project from now on, because there is a bug in some versions of Xcode where it crashes and destroys the project in just the way you describe in your question.
And update to the latest version of Xcode, because it is less likely to cause this problem (though in fact I have not found it reliable for renaming projects even now).

How can you permanently change iOS app configuration in Meteor Cordova?

Every time I meteor build, I have to open XCode and do the following:
remove and add an item from "Link Binary With Libraries" (Facebook SDK)
add a URL Type (custom URL scheme for my app)
add a "Required device capabilities" to "Custom iOS Target Properties"
How can I edit my Meteor project to have these steps done automatically, and to auto add things to AndroidManifest.xml?
In some way use mobile-config.js or cordova-build-override?
I'm happy to see another guy who is trying to build a hybrid application using Meteor / extending a Meteor Cordova iOS app, since I'm facing the very same issues. So I'm very happy to share my experiences and approaches with you. :-)
So far, I ended up with the following approach:
I created a base template for my iOS app using meteor build (not meteor run ios-device, since I did not know if Meteor does some optimizations for production code).
Then, I copied the whole Xcode project under /platforms/ios to another loaction and used this new project as my "master" project from then on. This project is being enriched with native code, e.g. it also includes the Cocoa Pods I'm needing.
Of course, I also did not want to copy files each and every time I trigger a new Meteor build. At least, I would like to have the Staging/www folder updated, as this is happening quite frequently.
So my first (rather naive) approach was
delete the Staging/www folder in the master project
replace it with a relative link (using Xcode's linking functionality) to the Staging/www folder inside the .meteor/local/.../ios/ project
This approach did not work, since the shell script used in the Meteor Xcode project can't handle these links.
My second approach is to create a symlink on the filesystem level instead. This works as it should, and I'm able to build the project in Xcode as it should.
I could have followed the same approach for the Cordova plugins folder, but I've decided to replace the plugins manually in order to get a better control over them, even it means a bit more effort then.
Having the symlink in place also means that Xcode's version management (and also SVN which I am using for everything) will ignore everything below Staging/www, which is good in my opinion, because I'm already versioning the webapp code in the Meteor project itself.
BTW: I've started a discussion thread on hybrid mobile app on the Meteor forums as well, but so far it did not get too much attraction:
https://forums.meteor.com/t/building-a-hybrid-meteor-cordova-app-share-experiences/8212
Maybe we could follow up on Meteor-specific things there, to have the Meteor community participate in the discussion?
EDIT: I would also like to share an approach that failed completely, at least for me, maybe I was too dumb... Before I used Meteor's Xcode template as the starting point, I also tried it "the other way round", i.e. I started with my already existing Xcode app project and tried to include Meteor's / Cordova's part by hand. Using this approach, I never managed to set everything up correctly. I had lots of troubles and also had to tweak a lot of the compiler / linker flags to even get the code compiling. This grew me a lot of gray hairs. But even after I managed to get everything to compile, Meteor hang during startup - and I never figured out why.
One remaining problem I'm still facing is that Meteor's hot code push functionality seems to have some severe issues on iOS, that are also documented as GitHub issues. It can happen that the iOS app gets completely broken and needs to be reinstalled. I tried the mdg:reload-on-resume package, but this did not work as it should and made things even worse. As far as I can tell from the GitHub discussions, one should better disable hot code push until the Meteor team has addressed these issues. Breaking the app completely due to code pushes is not what my users would expect.
Unfortunately plist values (and assumably AndroidManifest.xml as well) can only be changed by a plugin:
Add entry to iOS .plist file via Cordova config.xml

xcode 5 can't see NSLog(s) from old iOS project

I have an older iOS6 app that I was playing with last year; it was only for my wife, so I never released it, but I wanted to dust it off and see if it was potentially useful to others. So I load it up in XCode5 (5.0.2 running on 10.8.4; I've also tried this on my home laptop running the same XCode and Mavericks). However, though the app builds and runs fine, none of my NSLog statements show up in the console, on either computer. I've cleaned, rebuilt, run it on every simulator and iPad I have, hunted through settings, torn my hair out, etc., but I can't figure out how to get them to show up. I started a new iOS app to make sure it's not something in my setup, but NSLogs from there work just fine. Unfortunately, I'm not even sure where to start looking to fix this. Does anyone have any ideas for directions that I should be exploring here? Thanks!
Edit: I just tried copying over the files into a new project, and now the NSLogs are showing up! Still leaves me with no ideas as to why they're not showing up in the old project.
Edit2: It's not just user error; I can see the log messages from the new project with the copied files (see image). They just don't show in the old project when I run it.
Maybe you're not opened a Console in XCode 5, it seems, you're trying see a logs in member console.
Try click at here and you will see console with "All Output" option:
As noted in the comment by #combinatorial, I had a debug statement hidden (so cleverly that I fooled myself) in the pch file. Thanks so much for helping me nail that down!

finding unsupported apis with os version

I've developed and application for iPhone. It works fine on os4 but it does not work on os3.1. In fact works but there are some problems; after splash screen a what screen appears. while I leaving the application I can see the application is opened successfully but just see while exiting.
So I wonder if there is a tool which says which apis have problems with os3.1? So I have a chance to replace them.
If you want to check a specific API, just run this in your code somewhere with an appropriate response. For example, to see if print is supported, run this...
if (NSClassFromString(#"UIPrintInfo")) {
}
Set your project's Base SDK to iphone-os-3-1, then build. All the error messages about classes, methods, and functions that don't exist must designate things added since iphone-os-3-1, since your project built and linked fine against the iphone-os-4-0 SDK.
If you don't have the iphone-os-3-1 SDK, try this instead:
Open your project's Build Settings.
Find the "Preprocessor Macros" setting.
Edit it and add __IPHONE_OS_VERSION_MAX_ALLOWED=30100
Now, try building. This should cause everything introduced after iOS 3.1 to be labeled unavailable, producing the same errors as if you had switched to the iphone-os-3-1 SDK.
It's a good idea to get a second installation of Xcode for this situation, in this case you need 3.2.1 with SDK 3.1.3 - I wish I could help you with a download link since it is no longer shown on Apple's page, but I have googled in the past and found direct, official download links which will work as long as you are signed in with your developer account, so good luck.
The annoying bit is that you need to go through your project files and set "Base SDK" to 3.1.3 and then back once you have completed the exercise. But it is the easiest way to flag what you can't do in 3.1.3. "sudo rm -rf" (I feel nervous even typing that) has an excellent method there but you need to have an inkling of what might be safe and what might not before you implement it or else you end up with code 10x the size it needs to be.
Apple really needs to sort out this issue - hopefully by flagging methods that are prior to your specified "Deployment Target", in the same way that deprecated methods are flagged.

Resources