ShapeCache not being set up-- plist file not being loaded? - ios

So I asked a slightly similar question to this one but did not get it answered so I figured I would look into it more myself and narrow my problem down to make it more simple.
In my Box2D game I am using Physics Editor to deal with my collision detection. In my main class (GameLayer), I have a method which sets up the ShapeCache and I put it in the init:
- (void)setupShapeCache
{
[[ShapeCache sharedShapeCache] addShapesWithFile:#"shapes.plist"];
}
"shapes.plist" is in my targets (under copy bundle resources) and it's in my resources folder of my project with the same name as it is used throughout my xcode project.
As I run my game I keep getting an assertion failed error in my ShapeCache class. I have figured out that this is because the "shapes.plist" file never loads.
The exact error looks like:
Assertion failed: (so), function -[ShapeCache addFixturesToBody:forShapeName:userdataCallBack:],
file /Users/***/Desktop/***/***/ShapeCache.mm, line 92.
My ShapeCache class is adapted from the Space Game Starter Kit but I do not believe that that makes a difference (SpaceGame ShapeCache vs PhysicsEditor ShapeCache)
Does anyone have any idea as to why my physics editor plist (shapes.plist) never loads?
If any more information would help please tell me!
Thank you so much!
:)

Related

How to apply FBMemoryProfiler to cocos2d-x iOs game?

I want to apply the FBMemoryProfiler for cocos2dx iOs game.
First, I create a simple demo, "cocos new CocosGame -p com.test -l cpp". There are a lot of projects of the demo, like proj.ios_mac, proj.android, proj.linux...
I chose the ios_mac one and it works fine.
Then, I create a podfile to import the FBMemoryProfiler in proj.ios_mac and I use podfile to install FBMemoryProfiler.
However, when I open the CococsGame.xcworkkspace, there are a lot of errors, like
cannot find libFBAllocationTracker.a
I really want to know how to apply FBMemoryProfiler for cocos2d, what am I doing wrong?
You need to include FBAllocationTracker in your demo first.
You can do that by including the following
import FBAllocationTracker
in the headers and in the main method
FBAllocationTrackerManager.sharedManager()?.startTrackingAllocations()
into your main.swift
PS: You might wanna enable Generations by adding the following line with the above :
FBAllocationTrackerManager.sharedManager()?.enableGenerations()
If you have already done the above and still getting the same error, it looks like your project is not linking the FBAllocationTracker properly and you might wanna look at the https://github.com/facebook/FBMemoryProfiler "Usage" section again to see if you are missing something.

Xcode sees only some of similar extensions of a nested class written in separate files

I'm trying to keep my code as readable as it possible by keeping methods and files as short as I can and using nested classes for namespacing. It works fine except some really strange moment.
I have some class used for namespacing.
class Space { }
All classes used within that one are implemented in their own files as extensions.
extension Space {
class SomeClass {
// implementation
}
}
One of those SomeClasses have a number of quite sophisticated initialisers, so I have split them up to their own files as well and implemented it as follows:
extension Space.SomeClass {
convenience init(fromSomeSource source: SourceClass) {
self.init()
// other implementation
}
}
The problem is that some of those files works just fine, but some of them throwing 'SomeClass' is not a member type of 'Space' and I don't know why.
All of them are pretty similar. The only difference is implementation of an initialiser itself. All files are held in the same place and I have no idea why some of them works fine and some not.
I tried to move code from not working files into files that works fine and that works – Xcode agrees to see the code and said nothing against it. But when the very same code lies in its own file – Xcode or compiler doesn't want to understand that SomeClass is really a member of Space.
I tried to clean the build, including manual dumping of ~/Library/Developer/Xcode/DerivedData folder. Nothing helps.
Surely I can put it all in a single file and it will work fine, but what the reason why it so picky in my case?
I've tried to create a new file and move there all contents from one of the bad ones. It works, but only with certain file names. Some names gives the same error again, but it seems that if name is totally new and not similar to any of the existing ones - it works. Magic?
I've encountered similar issue, it seems like the complier is trying to process the file where you extend the nested class before the one where it's defined. Therefore you have this error saying that that Space has no member SomeClass.
The solution I've found is to go to your target settings, open Build Phases.
There, in Compile Sources section you should put the file where you define the nested class above files where you extend it.
This solution seems to even play well with your observation that when you recreate the file it sometimes compiles, because when you recreate the file its position in Compile Sources changes.

TypeError: Error #2023: Class Main$ must inherit from Sprite to link to the root. Feathers

Ok, hopefully this problem is easily reproducible:
git clone https://github.com/joshtynjala/feathers
Create Flash Builder project and point it to the TileList example in the examples folder.
Make sure to select Main.as (not TileList.as) as the main file. It is a few folders deep.
I am debugging on my iPhone - not sure what happens with an emulator but I'm assuming I would get the same error. So when I do, Run -> Debug, it loads fine - but when I click on the app to open it on my phone, this error pops up in Flash Builder:
TypeError: Error #2023: Class Main$ must inherit from Sprite to link to the root.
Not sure what this means - I found a few things on google, but nothing has lead me to any success.
My problem was with step 3 in my outline above - I needed to make the TileList.as the main file instead of Main.as (not sure why TileList.as isn't called Main.as) - I also needed to add all the icon images to the main source folder because they weren't there (maybe something that needs to be corrected on the feathers repo).
you must extend Sprite to your main class.
import flash.display.Sprite
public class Main extends Sprite{
}

ContentLoadException problem

I'm very new to XNA. Actually I have XNA 4.0 book by kurt jaegers, so i installed VS 2010 and XNA 4.0 and wrote my first program. But that program didn't run successfully,it kept displaying the ContentLoadException file not found. So i did a bit of research on web and found that there is some issue with XNA 4.0. So I uninstalled the VS 2010 & XNA 4.0 and installed VS 2008(express edition) & XNA 3.0 . Then I compiled my first program on it and i ran successfully.
But,now I'm facing the same problem again with my new projects. I've tried both Syntax :
xx = this.Content.Load<Texture2D>("TitleScreen");
xx = Content.Load<Texture2D>(#"TitleScreen");
And there is no spelling mismatch problem. Please Mods guide me. And please tell me why I'm getting this problem again and again.
System Specs :
XP sp3,i3,2gb RAM.
Content that you want to load into via the ContentManager needs to be in the content project. Pretend for a moment it looks like this
Mygame.Content > SomeFolder > textureName
You would use content.Load<Texture2D>("SomeFolder/textureName") to get to it. If it was at the root of the Content project content.Load<Texture2D>("textureName") will work. If (and since) it isn't there are 2 things to check
Right click on the texture and go to properties. Look at the AssetName properties. This is what you use to load it up via the Content Manger. Try using whatever this name is.
The root directory the Content Manager looks in is "Content". Look at Content.RootDirectory and see what it is. If it isn't "Content" change it to that. That could also work.
In order to properly load content, you'll need to use the generic method
ContentManager.Load<T>
For example, if you're trying to load a Texture2D element, Use the following syntax:
Texture2D texture = Content.Load<Texture2D>("textureName");
Read more about loading content in this link.
There is a known issue with ContentManagers instanced by anything other than the default Game object constructor, which cause the problem you are experiencing.
If you are indeed using a ContentManager object other than the one supplied on the Game object, the solution is:
When you instantiate the ContentManager, you should set it's RootDirectory property to
#"Content"
Hope it helps

Duplicate Symbol Error in Objective-C build?

I got this error when I press build+debug:
ld: duplicate symbol .objc_class_name_BlogTableItemCell in /Users/fabian/Development/Workspaces/iphone_experiments/xcode_build_output/MausLog.build/Debug-iphonesimulator/MausLog.build/Objects-normal/i386/BlogTableItemCell-3733583914888A7B.o and /Users/fabian/Development/Workspaces/iphone_experiments/xcode_build_output/MausLog.build/Debug-iphonesimulator/MausLog.build/Objects-normal/i386/BlogTableItemCell-3733583914888A7B.o
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1
You could also get this error if you mistakenly let Xcode's auto-complete for #import statements specify the '.m" file for the 'duplicate' class instead of the '.h'.
It seems that you are compiling the same BlogTableItemCell class two times in different places of your code. This may happen in the following cases.
You have put the same class
implementation into two different
files;
You actually have just one
implementation of this class, however
you are also linking in your project a framework
or library containing a class whose
name is exactly the same of yours.
Try finding in the whole project your class and make sure only one copy is available within your project.
For me, changing 'No Common Blocks' from Yes to No ( under Targets->Build Settings->Apple LLVM - Code Generation )
I had a similar problem due to poor defining of consts.
I had defined a const in my header:
int const kCropLocationTop = 1;
This was presumably imported multiple times. To fix i changed the header def as follows:
extern int const kCropLocationTop;
and moved the assigning of the const to the .m file:
int const kCropLocationTop = 1;
Hope that helps anyone who's as ignorant of simple objective c concepts as I am!
iPhone: Duplicate Symbol Error? by user576924
answered it correctly for me. However to find the offending gremlin this ZSH snippet.
grep "import.*\.m" **/*.[hm]
Will immediately tell you where your error is.
By mistake the source file was included twice in the Project -> Build Phase -> Compile Sources. Removing one of them solved the problem.
The most common reason for this error is importing an xyz.m file instead of the xyz.h file.
Check if your imports contain something like
#import "----.m"
Just to add; Using Xcode to generate subclassed managed objects (Core Data) can sometimes duplicate the generated files. For me the fix was to delete the generated files and re-generate them.
I just ran into this problem myself. For the list, here's another possibility:
Duplicated linking line in the project file.
I caused this merging conflicts on a SVN update, when I accidentally duplicated a line.
It happened to me, too. In my case, one (just one) of my core data automatically generated classes was inserted twice. I spotted the duplication by looking at Build Phases...Compile Sources. Simply deleting one of the occurrences solved the problem.
Adding another possible cause to the list... you may have mistakingly created multiple constants in the implementation file, but outside of the implementation, with the same name.
In HeaderFileOne.m
NSString * const kCoolConstant = #"cool";
In HeaderFileTwo.m
NSString * const kCoolConstant = #"cool";
So changing one of those constant names would fix the compile error.
This may help someone
I got this error because I duplicate a ViewController and then renamed it. So when I compile I got this error. The reason was in both of the view controllers there was a "float" variable with same name i.e "float padding=10.0" which I had defined on class level.
Renaming the name of the above mentioned variable in One of the view controllers solved my problem.
I also faced to this problem. My solution was rename one of global variable, which has the same name as one in other class. Hope this helps
The same thing happened to me while I was playing with localizable xib files, accidentally I have created two implementation files and appereantly that caused the problem in my case. After deleting / recreating the implementation file without doing the same mistake, the error was fixed.
One of our developers left the "libSoomla*" project files in there twice. I removed the duplicate soomla files, re-built, and that fixed it!
Hope it helps.
In may case, I followed some instructions to build a newer version of Subversion which directed me to create this symbolic link:
ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/ /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain
Now I'm really a Windows guy so it wasn't immediately obvious to me - but removing the link fixed it for me (after restarting XCode):
rm /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain
Phew.
(The actual error I got was the one described here:
build error duplicate symbols arclite.o)
Make sure that you didn't import .m File . For me this happen I added #import "SchoolCommuterHome.m" instead of #import "SchoolCommuterHome.h"

Resources